[firebase-br] Stored chamar Stored. Problema offset na compilação

Romulo Oliveira romulocpd em yahoo.com.br
Seg Jan 9 08:39:07 -03 2006


Olá amigos,

Tenho uma Stored que movimenta o estoque:

CREATE PROCEDURE SP_INCMOVESTOQUE (
     PEMPRESA INTEGER,
     PEMPRESAORIGEM INTEGER,
     PPRODUTO INTEGER,
     PCOR INTEGER,
     PTAMANHO INTEGER,
     PDATALANC DATE,
     PTIPO CHAR(3),
     PDOCUMENTO VARCHAR(20),
     PHISTORICO VARCHAR(60),
     PQTDLANC NUMERIC(18,4))
RETURNS (
     PCODIGO INTEGER)
AS
DECLARE VARIABLE SALDOANTERIOR NUMERIC(18,4);
DECLARE VARIABLE SALDOATUAL NUMERIC(18,4);
BEGIN

     PCODIGO = GEN_ID(SEQ_MOVESTOQUE,1);

     SELECT ETQ_ATUAL FROM ESTOQUE
     WHERE ETQ_EMPRESA = :PEMPRESA AND
           ETQ_PRODUTO = :PPRODUTO AND
           ETQ_COR = :PCOR AND
           ETQ_TAMANHO = :PTAMANHO INTO :SALDOANTERIOR;

     IF (PTIPO = 'CRE') THEN
         SALDOATUAL = SALDOANTERIOR + PQTDLANC;
     IF (PTIPO = 'DEB') THEN
         SALDOATUAL = SALDOANTERIOR - PQTDLANC;

     INSERT INTO MOV_ESTOQUE
         (MES_CODIGO, MES_EMPRESA, MES_EMPRESAORIGEM, MES_PRODUTO, MES_COR,
          MES_TAMANHO, MES_DATALANC, MES_TIPO, MES_DOCUMENTO, MES_HISTORICO,
          MES_SALDOANTERIOR, MES_QTDLANC, MES_SALDOATUAL)
     VALUES
         (:PCODIGO, :PEMPRESA, :PEMPRESAORIGEM, :PPRODUTO, :PCOR,
          :PTAMANHO, :PDATALANC, :PTIPO, :PDOCUMENTO, :PHISTORICO,
          :SALDOANTERIOR, :PQTDLANC, :SALDOATUAL);
     SUSPEND;

     UPDATE
         ESTOQUE
     SET
         ETQ_ATUAL = :SALDOATUAL
     WHERE
         ETQ_EMPRESA = :PEMPRESA AND
         ETQ_PRODUTO = :PPRODUTO AND
         ETQ_COR = :PCOR AND
         ETQ_TAMANHO = :PTAMANHO;

END

Esta Stored funciona perfeitamente! Se chamada direto.

Agora tenho uma stored que inclui itens de uma requisição de produtos.

Ela é assim:


CREATE PROCEDURE SP_INCREQUISICAO_ITENS (
     PREQUISICAO INTEGER,
     PEMPRESA INTEGER,
     PPRODUTO INTEGER,
     PCOR INTEGER,
     PTAMANHO INTEGER,
     PQTD NUMERIC(12,4),
     PVLRUNIT NUMERIC(12,4))
RETURNS (
     PCODIGO INTEGER)
AS
BEGIN

     SELECT
         MAX(REI_ITEM)
     FROM
         REQUISICAO_ITENS
     WHERE
         REI_CODIGO = :PREQUISICAO AND
         REI_EMPRESA = :PEMPRESA
     INTO
         :PCODIGO;

     IF (:PCODIGO IS NULL) THEN
         PCODIGO = 1;
     ELSE
         PCODIGO = PCODIGO + 1;
     SUSPEND;

     INSERT INTO REQUISICAO_ITENS
         (REI_CODIGO, REI_EMPRESA, REI_ITEM, REI_PRODUTO, REI_COR,
          REI_TAMANHO, REI_QTD, REI_VLRUNIT)
     VALUES
         (:PREQUISICAO, :PEMPRESA, :PCODIGO, :PPRODUTO, :PCOR,
          :PTAMANHO, :PQTD, :PVLRUNIT);

     EXECUTE PROCEDURE SP_INCMOVESTOQUE(:PEMPRESA, :PEMPRESA, :PPRODUTO, 
:PCOR,
     :PTAMANHO,CURRENT_DATE, 'DEB', 'TESTE','TESTE',1);

END

Vejam que nela chamo o SP_INCMOVESTOQUE.   Os parametros estao todos 
corretos, porém na hora da compilação se eu deixar a chamada ele dá o 
seguinte erro:

Invalid token.
invalid request BLR at offset 500.
parameter mismatch for procedure SP_INCMOVESTOQUE.

O que pode ser?  Ele diz parametro inválido porém já verifiquei 
exatamente todos os parametros.

Vlw galera!!!
Romulo Oliveira






Mais detalhes sobre a lista de discussão lista