[firebase-br] Duvidas com procedures

Alexandre camilo em apollosistemas.com.br
Qui Maio 9 10:59:42 -03 2013


Galera tenho este comando, que executa certinho no firebird 2.1 mas quando
tento rodar ela no firebird 2.5 ela da erro, 
Se eu tiro a parte dos /* INSUMOS DE PRODUÇÃO */ , ela roda redondinha, so
que não conseguir enxergar algo que possa ter mudado.

Será que alguém tem alguma ideia??  


create or alter procedure PROC_ESTOQUEATUAL ( DIA date = current_date) 
returns ( 
    PROD_CODAUT integer, 
    PROD_ID char(25), 
    PROD_DESCRI varchar(195), 
    PROD_MEDIDA varchar(30), 
    PROD_ESTATUAL double precision) 
as 
declare variable SAIDAS double precision; 
declare variable ENTRADAS double precision; 
declare variable ESTINICIAL double precision; 
declare variable SAIDASPRODUCAO double precision; 
declare variable PRODUZIDO double precision; 
declare variable DTESTINICIO date; 
declare variable QTDESTINICIO double precision; 
declare variable INIPERIODO DATE; 
BEGIN 
    FOR 
    SELECT PROD.PROD_CODAUT, PROD.PROD_ID, PROD_DESCRI, PROD_MEDIDA,
EST.EST_DATA, EST.EST_QTD  FROM TAB_PRODUTOS PROD 
    LEFT JOIN TAB_ESTINICIAL EST ON PROD.PROD_CODAUT = EST.PROD_ID WHERE (
(UPPER(PROD_TIPO) = 'P')) AND (PROD.PROD_STATUS = 1) INTO 
    PROD_CODAUT, PROD_ID, PROD_DESCRI, PROD_MEDIDA, DTESTINICIO,
QTDESTINICIO DO 
    BEGIN 
        IF (DTESTINICIO >= DIA) then 
        BEGIN 
            SELECT 
                SUM(CASE NF.NF_TIPO WHEN 0 THEN COALESCE(NFI.ITEN_QTD,0)
ELSE 0 END) SAIDAS, 
                SUM(CASE NF.NF_TIPO WHEN 1 THEN COALESCE(NFI.ITEN_QTD,0)
ELSE 0 END) ENTRADAS 
            FROM TAB_PRODUTOS PROD LEFT JOIN 
                TAB_ITENSNF NFI LEFT JOIN TAB_NF NF ON NF.NF_ID =
NFI.ITEN_NFID 
                ON NFI.ITEN_PRODID = PROD.PROD_ID 
            WHERE (NF.NF_DTEMISSAO < :DTESTINICIO) AND (NF.NF_DTEMISSAO >=
:DIA) AND (PROD.PROD_CODAUT = :PROD_CODAUT) AND (NF_CANCELADA = 'N') 
                   AND ((NF_PROPRIA ='N' ) or ((NF_PROPRIA <> 'N') AND
(((NF_CSTAT IS NULL) AND (NF_TPAMBIENTE = 0)) OR ((NF_CSTAT > 0) AND
(NF_TPAMBIENTE = 1))))) 
            INTO SAIDAS, ENTRADAS; 
            PROD_ESTATUAL = QTDESTINICIO - COALESCE(ENTRADAS,0) +
COALESCE(SAIDAS,0); 
 
            /* INSUMOS DE PRODUÇÃO */ 
            SELECT SUM(DEPOIS) DEPOIS FROM ( 
            SELECT (PDC.PDC_QTD * INS_QTD) + ((PDC.PDC_QTD * INS_QTD) *
(INS_PPERDA/100)) DEPOIS 
            FROM TAB_INSUMOS INS 
                INNER JOIN TAB_PRODUCAO PDC ON INS.PROD_CODAUT =
PDC.PROD_CODAUT 
                INNER JOIN TAB_PRODUTOS PROD INNER JOIN TAB_ESTINICIAL EST
ON EST.PROD_ID = PROD.PROD_CODAUT ON INS.INS_PRODCODAUT = PROD.PROD_CODAUT 
            WHERE  (PROD.PROD_CODAUT = :PROD_CODAUT) AND (PDC.PDC_DTOS <
:DTESTINICIO) AND (PDC.PDC_DTOS >= :DIA) ) TEMP 
            INTO SAIDASPRODUCAO; 
            PROD_ESTATUAL = PROD_ESTATUAL + COALESCE(SAIDASPRODUCAO,0); 

            /* PRODUTO PRODUZIDO*/
            SELECT SUM(PDC.PDC_QTD) DEPOIS 
            FROM TAB_PRODUCAO PDC INNER JOIN TAB_ESTINICIAL EST ON
EST.PROD_ID = PDC.PROD_CODAUT 
            WHERE (PDC.PROD_CODAUT = :PROD_CODAUT) AND (PDC.PDC_DTOS <
:DTESTINICIO) AND (PDC.PDC_DTOS >= :DIA) INTO PRODUZIDO; 
            PROD_ESTATUAL = PROD_ESTATUAL + COALESCE(PRODUZIDO,0); 
        END 
    SUSPEND;
    END 
END




Desde já agradeço


Alexandre Camilo.





Mais detalhes sobre a lista de discussão lista