[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