[firebase-br] [Fwd: FOR EXECUTE STATEMENT]

Luiz Carlos trackmaster em bol.com.br
Qua Mar 16 14:51:27 -03 2005




Pessoal, boa tarde!

estou com um pequeno problema em minha stored procedure, gostaria de 
executar um comando dentro de uma variavel com o FOR EXECUTE STATEMENT, 
mas quando jogo o comando dentro da variavel, dá um erro de Fim de 
comando inexperado, segue abaixo a procedure:
----------------------------------------------------------------------------------------------------
  CREATE PROCEDURE HV2_SP (
   DT1 VARCHAR(20),
   DT2 VARCHAR(20),
   MARCOD VARCHAR(3),
   PROC INTEGER)
RETURNS (
   HVE_ITEM VARCHAR(27),
   HVE_MARCA VARCHAR(3),
   HVE_PROC INTEGER,
   REF_SALDO FLOAT,
   HVE_QTDE INTEGER,
   CLF_NOME_FANTASIA VARCHAR(20),
   HVE_VENDINT VARCHAR(15),
   HVE_DATANF DATE,
   HVE_NUMNF INTEGER,
   HVE_MESREF INTEGER,
   HVE_ANOREF INTEGER,
   HVE_CNPJCPF VARCHAR(18),
   HVE_CKD CHAR(1))
AS
DECLARE VARIABLE COMANDO VARCHAR(10000);
BEGIN

 if (:proc is not null) then

  COMANDO = 'SELECT HVE_ITEM,HVE_MARCA,HVE_PROC,HVE_QTDE,
         HVE_VENDINT,HVE_DATANF,HVE_NUMNF,
         HVE_MESREF,HVE_ANOREF,HVE_CNPJCPF,HVE_CKD
         FROM histvendas
         WHERE
         ((HVE_DATANF>='||:dt1||') AND
         (HVE_DATANF<='||:dt2||')) AND
         (HVE_MARCA='||:marcod||') AND
         (HVE_PROC= '||:proc||') AND
         (HVE_CKD IS null)
         ORDER BY 1,8' ;

  if (:proc is null) then
   COMANDO = 'SELECT HVE_ITEM,HVE_MARCA,HVE_PROC,HVE_QTDE,
     HVE_VENDINT,HVE_DATANF,HVE_NUMNF,
     HVE_MESREF,HVE_ANOREF,HVE_CNPJCPF,HVE_CKD
     FROM histvendas
     WHERE
     ((HVE_DATANF>='||:dt1||') AND
     (HVE_DATANF<='||:dt2||')) AND
     (HVE_MARCA='||:marcod||') AND
     (HVE_CKD  IS null)
     ORDER BY 1,8' ;

  FOR
    execute statement :COMANDO into :HVE_ITEM,
        :HVE_MARCA,
        :HVE_PROC,
        :HVE_QTDE,
        :HVE_VENDINT,
        :HVE_DATANF,
        :HVE_NUMNF,
        :HVE_MESREF,
        :HVE_ANOREF,
        :HVE_CNPJCPF,
        :HVE_CKD
 DO
 BEGIN
   select CLF_NOME_FANTASIA from clifor where CLF_CNPJCPF = 
:hve_cnpjcpf into :clf_nome_fantasia;
   select distinct (sum(REF_SALDO)) from referencia where REF_ITEM = 
:hve_item into :ref_saldo;
   SUSPEND;
 END
END
----------------------------------------------------------------------------------------------------

Quando eu executo no debbuger, ela me mostra a variavel comando da 
seguinte forma:

  COMANDO = 'SELECT HVE_ITEM,HVE_MARCA,HVE_PROC,HVE_QTDE,
         HVE_VENDINT,HVE_DATANF,HVE_NUMNF,
         HVE_MESREF,HVE_ANOREF,HVE_CNPJCPF,HVE_CKD
         FROM histvendas
         WHERE
         ((HVE_DATANF>=25.03.2004) AND
         (HVE_DATANF<=25.03.2005)) AND
         (HVE_MARCA=FRM) AND
         (HVE_PROC= 4') AND
         (HVE_CKD IS null)
         ORDER BY 1,8' ;

minha duvida:

nos campos de data e onde está escrito  as datas e  o FRM não deveriam 
estar desta forma para  o comando executar:
     ((HVE_DATANF>='25.03.2004') AND
     (HVE_DATANF<='25.03.2005')) AND
     (HVE_MARCA='FRM') AND
se sim, como faço pra concatenar a aspas nesse cenário?

desculpem pela mensagem gigantesca mas eh que tou precisando de um help!!

Abraços!

Luiz Carlos.







Mais detalhes sobre a lista de discussão lista