Stored chamar Stored. Erro offset na compilação

Firebird

09/01/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



Romulocpd

Romulocpd

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

09/01/2006

Vc esqueceu de pôr o parâmetro de retorno da SP, assim:
EXECUTE PROCEDURE SP_INCMOVESTOQUE :PEMPRESA, :PEMPRESA, :PPRODUTO, :PCOR, 
:PTAMANHO,CURRENT_DATE, ´DEB´, ´TESTE´,´TESTE´,1) RETURNING_VALUES :PCODIGO;



GOSTEI 0
Romulocpd

Romulocpd

09/01/2006

Putz.. na mosca!!!!! Vlw!!!!


GOSTEI 0
POSTAR