[firebase-br] Problema com Select em Procedure

Isael Faria Junior isael em stetika.com.br
Sex Abr 11 09:03:51 -03 2008


Pessoal, 

Tenho o seguinte  procedure.

---

CREATE PROCEDURE SPR_ORDEM_CPR_FORNECEDOR (
    COD_ORD_COM INTEGER,
    DATA_INICIAL DATE,
    DATA_FINAL DATE,
    ID_FORNECEDOR INTEGER,
    TIPO VARCHAR(1))
AS
DECLARE VARIABLE ID_PRODUTO INTEGER;
DECLARE VARIABLE VAL_UNITARIO DOUBLE PRECISION;
DECLARE VARIABLE PRODUTO VARCHAR(50);
DECLARE VARIABLE CODIGO INTEGER;
DECLARE VARIABLE CODENA VARCHAR(15);
DECLARE VARIABLE ID_LOC_ESTQ INTEGER;
DECLARE VARIABLE SALDO FLOAT;
DECLARE VARIABLE VENDA FLOAT;
DECLARE VARIABLE COMPRAS FLOAT;
DECLARE VARIABLE ENTRADAS FLOAT;
DECLARE VARIABLE FONTE_ODBC VARCHAR(30);
DECLARE VARIABLE SAIDAS FLOAT;
DECLARE VARIABLE ID_UNIDADE INTEGER;
DECLARE VARIABLE QTDMIN FLOAT;
DECLARE VARIABLE UNIDADE VARCHAR(3);
DECLARE VARIABLE VALOR FLOAT;
begin
  SELECT ID_LOC_CPR,FONTE_ODBC FROM PARAMETROS INTO :id_loc_estq,:fonte_odbc;

  FOR SELECT COD_PRODUTO FROM CAT_PRO_FOR WHERE COD_FORNECEDOR = :id_fornecedor
   INTO :id_produto DO
  BEGIN

   SELECT SUM(QTD_MOV) FROM MOVEST WHERE ID_PRODUTO = :id_produto AND
    DAT_MOV < :data_final AND ID_LOCAL_ENT = :id_loc_estq AND
    SUBSTR(SIT_TIPO_LANC,1,1) = 'E' INTO :entradas;

    if (:entradas IS NULL) then
        entradas = 0;

   SELECT SUM(QTD_MOV) FROM MOVEST WHERE ID_PRODUTO = :id_produto AND
    DAT_MOV < :data_final AND ID_LOCAL_SAI = :id_loc_estq AND
    SUBSTR(SIT_TIPO_LANC,1,1) = 'S' INTO :saidas;

    if (:saidas IS NULL) then
        SAIDAS = 0;

    SALDO = ENTRADAS - SAIDAS;

    IF (:tipo = 'N') THEN
    BEGIN
     select
       sum(qtd_item)
     from ite_pro_nota
     where id_tipo_operacao
      in (select id_tipo_operacao from tipo_operacao where sit_tip_op = 'V')
     and id_nota
      in (select id_nota from notas_fiscais where dat_emissao between
       :data_inicial and :data_final)
     AND ID_PRODUTO = :id_produto into :venda;
    END
    IF (:tipo = 'P') THEN
    BEGIN
      SELECT
       SUM(QTD_ITEM)
        FROM item_prod_ped
       WHERE ID_TIPO_OPERACAO
       IN (SELECT ID_TIPO_OPERACAO FROM tipo_operacao WHERE SIT_TIP_OP = 'V')
      AND ID_PEDIDO
       IN (SELECT ID_PEDIDO FROM PEDIDO WHERE DAT_EMISSAO between
        :data_inicial AND :data_final)
      AND ID_PRODUTO = :id_produto INTO :venda;
    END

    IF (:VENDA IS NULL) THEN
    BEGIN
     venda = 0;
    END

    if (:fonte_odbc = 'DUGS') then
    BEGIN
     SELECT PRCUSTO,DESCRICAO,CODBAR,QTDMIN,ID_UNIDADE FROM PRODUTOS WHERE ID_PRODUTO = :id_produto
      INTO :val_unitario,:produto,:codena,:qtdmin,:id_unidade;
    END
    ELSE
    BEGIN
     SELECT PRCUSTO,DESCRICAO,ID_PRODUTO,QTDMIN,ID_UNIDADE FROM PRODUTOS WHERE ID_PRODUTO = :id_produto
      INTO :val_unitario,:produto,:codena,:qtdmin,:id_unidade;
    END

    if (qtdmin IS NULL) then
      qtdmin = 0;

    COMPRAS = (:venda + :qtdmin) - :saldo;

    SELECT SIGLA FROM UNIDADE WHERE ID_UNIDADE = :id_unidade INTO :unidade;

    INSERT INTO ite_pro_oc(COD_ORD_OC,ID_PRODUTO,CODIGO,PRODUTO,SALDO,VAL_QTD_PRO,VAL_PRO_UNIT,
     VENDA,VAL_TOT_IPI,ID_UNIDADE,UNIDADE) VALUES
    (:cod_ord_com,:id_produto,:codena,:produto,:saldo,:compras,:val_unitario,:venda,
     0,:id_unidade,:unidade);
  END
  /* Procedure Text */
  suspend;
end;

--

Onde este Select deveria me trazer o valor 1 
SELECT
       SUM(QTD_ITEM)
        FROM item_prod_ped
       WHERE ID_TIPO_OPERACAO
       IN (SELECT ID_TIPO_OPERACAO FROM tipo_operacao WHERE SIT_TIP_OP = 'V')
      AND ID_PEDIDO
       IN (SELECT ID_PEDIDO FROM PEDIDO WHERE DAT_EMISSAO between
        :data_inicial AND :data_final)
      AND ID_PRODUTO = :id_produto INTO :venda;

O engraçado que que quando rodo esse select no sql editor o mesmo me monstra o valor correto, porem ao executar a procedure me tras o valor null

Detalhe não tenho como debug passo a passo pois a minha versão de IBExpert não permite isso.

Alguem pode me ajudar a solucionar esse misterio ??




Isael Faria Junior
Rua José Paulino 320 SL 51
Campinas / SP
Stetika Informática LTDA
Fone: 3203-0340  Cel:9198-6729



Mais detalhes sobre a lista de discussão lista