GARANTIR DESCONTO

Fórum Como passar parâmetro IN para uma Stored Proc... #55091

06/02/2006

0

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]


Diegodelphi

Diegodelphi

Responder

Posts

06/02/2006

Diegodelphi

sobe!!!


Responder

Gostei + 0

08/02/2006

Thomaz_prg

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:

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.


Responder

Gostei + 0

10/02/2006

Diegodelphi

valeu thomaz_prg ... É o cara..
Era isso ai...

Obrigado


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar