- Este tópico contém 9 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 12 meses atrás por
airoosp.
-
AutorPosts
-
25 de março de 2009 às 12:22 am #85929
airoosp
ParticipanteBoa tarde,
Alguém sabe como fazer para que ao passar um parâmetro para um cursor o conteúdo desta variável seja utilizada na claúsula Where.
Por exemplo
Cursor listagem (pEstado in varchar2) is
select *
from cad_estados
pEstado
;Onde pEstado=’where sigla = ”SP” ‘
O cursor retorna os dados mas não respeita o filtro, tentei utilizar o comando execute immediate dentro do cursor mas não funcionou.
Se alguém tiver alguma idéia agradeço.Obrigado.
Airton
25 de março de 2009 às 12:36 am #85931Marcio68Almeida
Participantecomo você está passando a variável ???
como você fez a clausula WHERE da sua consulta ???25 de março de 2009 às 1:26 am #85934Leonardo Litz
ParticipanteFaça assim:
Cursor listagem (pEstado in varchar2) is
select *
from cad_estados
where sigla = pEstado
;25 de março de 2009 às 1:53 am #85935Manoel872
ParticipanteDECLARE
Cursor listagem (pEstado in varchar2) isselect *
from cad_estados
where sigla = pEstado;
BEGIN
OPEN listagem(‘SP’);
….
END;25 de março de 2009 às 4:35 pm #85938airoosp
ParticipanteFiz um teste com os exemplos mas não funciona conforme os parâmetros passados na claúsula where.
O conteúdo do parâmetro será composto pelas opções que o usuário selecionar em tela através da seleção de vários checkbox.Por exemplo:
Selecione de quais montadoras deseja ver informações.
GM
Fiat
Volvo
Kia
FordSelecione quais tipos de motorização.
1.0
1.8
2.4
3.0Selecione quais tipos de combustível.
Gás
Gasolina
Álcool
Flex
DieselMudando de tabela para cad_veiculos, o conteúdo do parâmetro seria:
pConsulta=’where combustivel in (‘Gás’,’Flex’,’Diesel’) and motor in (‘1.0′,’3.0’) and montadora in (‘GM’,’FIAT’,’FORD’)’
Obrigado.
Airton
25 de março de 2009 às 9:23 pm #85943Ishii
ParticipanteOlá,
Acho que você vai ter que usar o DBMS_SQL.
Seria algo assim:
Declare
cCursor number;
vStmt varchar2(2000);
vCond varchar2(2000);
vNumCha varchar2(60);
vResult varchar2(2000); -- se o num_chassis for mesmo varchar2....vAux number;
begin
cCursor:= dbms_sql.open_cursor;
vStmt: = 'select num_chassis from cad_veiculos '|| vCond;
dbms_sql.parse (cCursor, vStmt, dbms_sql.v7); -- resolve a query
dbms_sql.define_column( cCursor, 1, vNumCha);
vAux:= dbms_sql.execute ( cCursor);
while dbms_sql.fetch_rows (cCursor) > 0 then
dbms_sql.column_value (cCursor, 1, vNumCha);
vResult:= vResult ||vNumCha;
end loop;
dbms_sql.close_cursor( cCursor);
end;
E você usa o vResult para colher ou alimentar numa tabela ou para capturar mesmo os resultados..
[]s Ishii
25 de março de 2009 às 9:35 pm #85944airoosp
ParticipanteObrigado Ishii vou fazer um teste com o exemplo que você passou.
25 de março de 2009 às 10:39 pm #85948airoosp
ParticipanteIshii,
O exemplo que você passou funciona, tive que fazer algumas modificações na chamada do cursor mas funcionou, detalhe na instrução dbms_sql.define_column( cCursor, 1, vNumCha) faltou acrescentar no final o tamanho da coluna.
dbms_sql.define_column( cCursor, 1, vNumCha,20);
Obrigado.
Airton
26 de março de 2009 às 4:44 am #85952Ishii
Participantejavascript:emoticon(‘:D’)
[]s Ishii
26 de março de 2009 às 4:08 pm #85957airoosp
ParticipanteIshii,
Referente a resposta que enviei achei estranho ter que colocar o tamanho do campo, pesquisei mais e descobri que se o tipo da variável e/ou campo for varchar, char e raw é necessário definir o tamanho do campo no comando dbms_sql.define_column.
Fica essa informação para o pessoal do GPO.
Obrigado.
Airton
-
AutorPosts
- Você deve fazer login para responder a este tópico.