[firebase-br] FOR Execute Statement

Kléber Caneva kdcc em terra.com.br
Qui Dez 29 14:00:19 -03 2005


Amigo a lista não aceita anexos..

[]´s

Kléber Caneva

----- Original Message ----- 
From: "José Filho" <jfilho.bg em uol.com.br>
To: <lista em firebase.com.br>
Sent: Wednesday, December 28, 2005 5:45 PM
Subject: [firebase-br] FOR Execute Statement


Boa tarde, amigos!

Comecei a desenvolver SP's há alguns meses e há algumas semanas SQL's
dinâmicos c/ o FOR EXECUTE STATEMENT. Só tem um probleminha... Quando eu vou
incluir os campos no componente ClientDataSet, depois de ligados todos os
componentes, no Delphi é gerado o erro que segue anexo (segue também o
código DDL da SP). No livro Firebird Essencial do Cantu e nas Notas da
Versão 1.5 de 08/02/2004 diz que não é possível trabalhar com parâmetros em
SQL's dinâmicos. Seria esse o meu problema? Então, por que no IBExpert a SP
é executada normalmente?

[ ]'s

José Filho
Barra do Garças-MT

************************************************************************************

SET TERM ^ ;

CREATE PROCEDURE EXTRATOLEITE (
    PRODUTOR INTEGER,
    MES SMALLINT,
    ANO SMALLINT)
RETURNS (
    LEI_PRODUTOR INTEGER,
    PRO_NOME VARCHAR(40),
    PRO_CNPJCPF VARCHAR(18),
    PRO_COTALITRO DECIMAL(15,2),
    PRO_COTAPERC DECIMAL(3,2),
    PRO_BONIFICAVLR DECIMAL(15,2),
    PRO_BONIFICAPERC DECIMAL(3,2),
    PRO_TANQUE INTEGER,
    PRO_TAXATANQUE DECIMAL(15,2),
    PRO_FRETEVALOR DECIMAL(15,2),
    PRO_FRETEPERC DECIMAL(3,2),
    LEI_LINHA INTEGER,
    LIN_CARRETEIRO VARCHAR(40),
    LIN_PAGAFRETE VARCHAR(5),
    LEI_BOM DECIMAL(15,2),
    LEI_ACIDO DECIMAL(15,2),
    REQ_TOTAL DECIMAL(15,2),
    PED_TOTAL DECIMAL(15,2),
    PRE_VLRBOMCOTA DECIMAL(15,2),
    PRE_VLRBOMEXTRA DECIMAL(15,2),
    PRE_VLRACIDO DECIMAL(15,2),
    FUNRURAL DECIMAL(3,2))
AS
DECLARE VARIABLE CODSQL VARCHAR(1030) CHARACTER SET WIN1252;
BEGIN
  CODSQL = 'SELECT RL.LEI_PRODUTOR, P.PRO_NOME, P.PRO_CNPJCPF,
P.PRO_COTALITRO,
            P.PRO_COTAPERC, P.PRO_BONIFICAVLR, P.PRO_BONIFICAPERC,
P.PRO_TANQUE,
            P.PRO_TAXATANQUE, P.PRO_FRETEVALOR, P.PRO_FRETEPERC,
RL.LEI_LINHA,
            L.LIN_CARRETEIRO, L.LIN_PAGAFRETE, SUM(RL.LEI_BOM),
SUM(RL.LEI_ACIDO)
            FROM RECLEITE RL
            LEFT JOIN PRODUTORES P
            ON (P.PRO_CODIGO = RL.LEI_PRODUTOR)
            LEFT JOIN LINHAS L
            ON (L.LIN_CODIGO = RL.LEI_LINHA)
            WHERE (EXTRACT (MONTH FROM RL.LEI_DATA) = ' || :MES || ')
            AND (EXTRACT (YEAR FROM RL.LEI_DATA) = ' || :ANO || ')';

  IF (PRODUTOR IS NOT NULL) THEN
    BEGIN
      CODSQL = CODSQL || 'AND (RL.LEI_PRODUTOR = ' || :PRODUTOR || ')';
    END

  CODSQL = CODSQL || 'GROUP BY RL.LEI_PRODUTOR, P.PRO_NOME, P.PRO_CNPJCPF,
P.PRO_COTALITRO,
                      P.PRO_COTAPERC, P.PRO_BONIFICAVLR, P.PRO_BONIFICAPERC,
P.PRO_TANQUE,
                      P.PRO_TAXATANQUE, P.PRO_FRETEVALOR, P.PRO_FRETEPERC,
RL.LEI_LINHA,
                      L.LIN_CARRETEIRO, L.LIN_PAGAFRETE
                      ORDER BY L.LIN_CARRETEIRO, P.PRO_NOME';

  FOR EXECUTE STATEMENT
    CODSQL
    INTO :LEI_PRODUTOR, :PRO_NOME, :PRO_CNPJCPF, :PRO_COTALITRO,
:PRO_COTAPERC,
         :PRO_BONIFICAVLR, :PRO_BONIFICAPERC, :PRO_TANQUE, :PRO_TAXATANQUE,
         :PRO_FRETEVALOR, :PRO_FRETEPERC, :LEI_LINHA, :LIN_CARRETEIRO,
:LIN_PAGAFRETE,
         :LEI_BOM, :LEI_ACIDO
  DO
    BEGIN
          SELECT COALESCE(SUM(R.REQ_TOTAL),0) FROM REQUISICOES R
          WHERE (R.REQ_PRODUTOR = :LEI_PRODUTOR)
          AND (R.REQ_LINHA = :LEI_LINHA)
          AND (R.REQ_DATAPAGTO IS NULL)
          AND (EXTRACT (MONTH FROM R.REQ_DATA) = :MES)
          AND (EXTRACT (YEAR FROM R.REQ_DATA) = :ANO)
          INTO :REQ_TOTAL;

          SELECT COALESCE(SUM(PD.PED_TOTAL),0) FROM PEDIDOS PD
          WHERE (PD.PED_CLIENTEPROD = :LEI_PRODUTOR)
          AND (PD.PED_TIPO = 'P')
          AND (PD.PED_LINHA = :LEI_LINHA)
          AND (PD.PED_DATAPAGTO IS NULL)
          AND (EXTRACT (MONTH FROM PD.PED_DATA) = :MES)
          AND (EXTRACT (YEAR FROM PD.PED_DATA) = :ANO)
          INTO :PED_TOTAL;

          SELECT COALESCE(PL.PRE_VLRBOMCOTA,0),
COALESCE(PL.PRE_VLRBOMEXTRA,0),
          COALESCE(PL.PRE_VLRACIDO,0) FROM PRECOLEITE PL
          WHERE (PL.PRE_MES = :MES)
          AND (PL.PRE_ANO = :ANO)
          INTO :PRE_VLRBOMCOTA, :PRE_VLRBOMEXTRA, :PRE_VLRACIDO;

          SELECT P.FUNRURAL FROM PARAM P
          INTO :FUNRURAL;

      SUSPEND;
    END
END^

SET TERM ; ^

GRANT SELECT ON REQUISICOES TO PROCEDURE EXTRATOLEITE;

GRANT SELECT ON PEDIDOS TO PROCEDURE EXTRATOLEITE;

GRANT SELECT ON PRECOLEITE TO PROCEDURE EXTRATOLEITE;

GRANT SELECT ON PARAM TO PROCEDURE EXTRATOLEITE;

GRANT EXECUTE ON PROCEDURE EXTRATOLEITE TO SYSDBA;





E-mail classificado pelo Identificador de Spam Inteligente Terra.
Para alterar a categoria classificada, visite
http://mail.terra.com.br/protected_email/imail/imail.cgi?+_u=kdcc&_l=1,1135800767.42858.19848.lusaca.terra.com.br,8095,Des15,Des15

Esta mensagem foi verificada pelo E-mail Protegido Terra.
Scan engine: McAfee VirusScan / Atualizado em 28/12/2005 / Versão: 
4.4.00/4661
Proteja o seu e-mail Terra: http://mail.terra.com.br/



--------------------------------------------------------------------------------


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 






Mais detalhes sobre a lista de discussão lista