Problemas com Stored Procedure
criei a seguinte sp no firebird só que na hora que eu chamo ela, não da erro não acontece nada.
execute PROCEDURE SPGRARIT (515,3,7,2005,2,´1234569´,´2005/10/10´,´p´,12)
SET TERM @;
CREATE PROCEDURE SPGRARIT (ITEM INTEGER,QTDE SMALLINT, MESENT SMALLINT,ANOENT SMALLINT,DOCENT INTEGER,
LOTE VARCHAR(20),VALIDADE DATE,TIPOMOV CHAR(1),ARM SMALLINT)
RETURNS (ITEM1 INTEGER, SEQ1 INTEGER)
AS
DECLARE VARIABLE SEQ INTEGER;
DECLARE VARIABLE QTDE1 INTEGER;
BEGIN
SELECT MAX(SEQ) FROM GERASITE WHERE ITEM = :ITEM INTO :SEQ;
SEQ1 = :SEQ + 1;
WHILE (QTDE < QTDE1) DO
BEGIN
QTDE1 = QTDE1 + 1;
SEQ = SEQ + 1;
INSERT INTO GERASITE (ITEM,SEQ,MES_ENT,ANO_ENT,DOC_ENT,LOTE,VALIDADE,TIPO_MOV,ARM) VALUES
(:ITEM,:SEQ,:MESENT,:ANOENT,:DOCENT,:LOTE,:VALIDADE,:TIPOMOV,:ARM);
END
ITEM1 = :ITEM;
SUSPEND;
END;@
[color=green:ace0476125]Movido de Delphi para Interbase/Firebird[/color:ace0476125]
execute PROCEDURE SPGRARIT (515,3,7,2005,2,´1234569´,´2005/10/10´,´p´,12)
SET TERM @;
CREATE PROCEDURE SPGRARIT (ITEM INTEGER,QTDE SMALLINT, MESENT SMALLINT,ANOENT SMALLINT,DOCENT INTEGER,
LOTE VARCHAR(20),VALIDADE DATE,TIPOMOV CHAR(1),ARM SMALLINT)
RETURNS (ITEM1 INTEGER, SEQ1 INTEGER)
AS
DECLARE VARIABLE SEQ INTEGER;
DECLARE VARIABLE QTDE1 INTEGER;
BEGIN
SELECT MAX(SEQ) FROM GERASITE WHERE ITEM = :ITEM INTO :SEQ;
SEQ1 = :SEQ + 1;
WHILE (QTDE < QTDE1) DO
BEGIN
QTDE1 = QTDE1 + 1;
SEQ = SEQ + 1;
INSERT INTO GERASITE (ITEM,SEQ,MES_ENT,ANO_ENT,DOC_ENT,LOTE,VALIDADE,TIPO_MOV,ARM) VALUES
(:ITEM,:SEQ,:MESENT,:ANOENT,:DOCENT,:LOTE,:VALIDADE,:TIPOMOV,:ARM);
END
ITEM1 = :ITEM;
SUSPEND;
END;@
[color=green:ace0476125]Movido de Delphi para Interbase/Firebird[/color:ace0476125]
Leonardobhbr
Curtidas 0
Respostas
Afarias
26/07/2005
SUSPEND só deve ser usado em Procedures de seleção, ex:
select * from SPGRARIT (515,3,7,2005,2,´1234569´,´2005/10/10´,´p´,12)
não sei se é o caso (mas não parece q seja) ... no mais ...
... como assim não acontece nada?!? Então o procedimento não está inserindo os valores corretamente na tabela GERASITE ?!?!
T+
select * from SPGRARIT (515,3,7,2005,2,´1234569´,´2005/10/10´,´p´,12)
não sei se é o caso (mas não parece q seja) ... no mais ...
... como assim não acontece nada?!? Então o procedimento não está inserindo os valores corretamente na tabela GERASITE ?!?!
T+
GOSTEI 0
Leonardobhbr
26/07/2005
ele passa não da erro mais tbem não grava registroo nenhum ja usei todos os componentes possivel SQLStoredProc,SQLDataSet e nada o engraçado é que se eu eu colocar uma SQLStoredProc e der um active em tempo de projeto ele mostra a mensagem de erro e grava mais em execução quando eu mando execproc não mostra nenhum erro, e não grava nada, e no iboConsole funciona normal.
GOSTEI 0
Gandalf.nho
26/07/2005
Colocar um EXIT no lugar do SUSPEND não ajuda?
GOSTEI 0
Beppe
26/07/2005
Mude:
1) SELECT MAX(SEQ) para SELECT coalesce(MAX(SEQ), 0)
2) Inicialize QTDE1
1) SELECT MAX(SEQ) para SELECT coalesce(MAX(SEQ), 0)
2) Inicialize QTDE1
GOSTEI 0