Como passar parâmetro IN para uma Stored Proc...
Pessoal, por favor me ajudem nessa...
Tenho uma SP (firebird 1.0) que é o seguinte:
for
select codpedido, datapedido, vlrsubtotal
from pedido
where codpedido in (:pNum)
into
:PS_QUANTPED,
:PS_DTULTPED,
:PS_VLRTOTALPED
do
Suspend;
End
Bom galera, eu precisaria passar na variavel pNum uma cadeia de valores do tipo, (12,15,8,20,30) mas isso nao funciona caso eu passe por parâmetro, mas se eu colocar direto na SP funciona que é uma beleza... alguem tem uma sugestão de como posso resolver esse problema ?
Pensei em criar a SP a partir da minha aplicação cliente, ja com os valores na clausula IN ai então executar a SP e depois da execução dar um DROP na SP.
Não sei se essa seria a melhor solução, mas até agora nao vejo solução para a passagem de parâmetros para a clausula IN.
Valeu pessoal, fico no aguardo de uma resposta de vcs.
Abraços
[quote:f68e91c3ea=´Moderação´][color=red:f68e91c3ea]Título editado por Massuda
Removido: ´Por favor!´
Evite utilizar termos apelativos no título.[/color:f68e91c3ea][/quote:f68e91c3ea]
Tenho uma SP (firebird 1.0) que é o seguinte:
for
select codpedido, datapedido, vlrsubtotal
from pedido
where codpedido in (:pNum)
into
:PS_QUANTPED,
:PS_DTULTPED,
:PS_VLRTOTALPED
do
Suspend;
End
Bom galera, eu precisaria passar na variavel pNum uma cadeia de valores do tipo, (12,15,8,20,30) mas isso nao funciona caso eu passe por parâmetro, mas se eu colocar direto na SP funciona que é uma beleza... alguem tem uma sugestão de como posso resolver esse problema ?
Pensei em criar a SP a partir da minha aplicação cliente, ja com os valores na clausula IN ai então executar a SP e depois da execução dar um DROP na SP.
Não sei se essa seria a melhor solução, mas até agora nao vejo solução para a passagem de parâmetros para a clausula IN.
Valeu pessoal, fico no aguardo de uma resposta de vcs.
Abraços
[quote:f68e91c3ea=´Moderação´][color=red:f68e91c3ea]Título editado por Massuda
Removido: ´Por favor!´
Evite utilizar termos apelativos no título.[/color:f68e91c3ea][/quote:f68e91c3ea]
Diegodelphi
Curtidas 0
Respostas
Diegodelphi
06/02/2006
sobe!!!
GOSTEI 0
Thomaz_prg
06/02/2006
Seguinte,
Se você fizer como está pensando, de criar a SP em tempo de execução, pode acontecer que, se 2 usuários tentarem a mesma operação ao mesmo tempo, aparecerá para um deles uma mensagem e erro, pois a procedure já estará existindo...
Uma forma de você resolver isso, seria usar o EXECUTE STATEMENT, dessa forma:
então usaria assim:
Este é um recurso do Firebird a partir do 1.5 se não estou enganado.
Se você fizer como está pensando, de criar a SP em tempo de execução, pode acontecer que, se 2 usuários tentarem a mesma operação ao mesmo tempo, aparecerá para um deles uma mensagem e erro, pois a procedure já estará existindo...
Uma forma de você resolver isso, seria usar o EXECUTE STATEMENT, dessa forma:
CREATE PROCEDURE TESTE ( pNum varchar(100) ) RETURNS ( PS_QUANTPED INTEGER, PS_DTULTPED DATE, PS_VLRTOTALPED DOUBLE PRECISION ) AS DECLARE VARIABLE COMANDO VARCHAR(200); BEGIN COMANDO = ´select codpedido, datapedido, vlrsubtotal from pedido where codpedido in (´|| :pNUM ||´)´; FOR EXECUTE STATEMENT :COMANDO into :PS_QUANTPED, :PS_DTULTPED, :PS_VLRTOTALPED do Suspend; End
então usaria assim:
SELECT * FROM TESTE ( ´12,15,8,20,30,50´ )
Este é um recurso do Firebird a partir do 1.5 se não estou enganado.
GOSTEI 0
Diegodelphi
06/02/2006
valeu thomaz_prg ... É o cara..
Era isso ai...
Obrigado
Era isso ai...
Obrigado
GOSTEI 0