Dúvida com stored procedure (IB)

03/02/2003

0

Tenho uma stored procedure para sequenciar um campo.
Eu passo os parametros ano (integer), tipo (char(1)),
codsecr (char(2)), coddpto(char(2)), tipo_doc (char(2)) e o parametro
de retorno é SEQ (integer).

Faço um select testando o ano, codsecr, etc. Se encontrar faço um
update incrementando o campo de sequencia com 1 e funciona
perfeitamente;
se não encontrar faço um insert atualizando o campo de sequencia
convertendo a string tipo_doc||´00001´ para integer, mas dá um erro
de conversão. Faço assim:
SEQ=CAST(:tipo_doc||´00001´ as integer)

Já tentei de várias maneiras e não consegui resolver o problema.
O que pode estar errado?

Desde já agradeço a colaboração.

[]´s

Romilson Alves
EPD/VR

Obs: A stored procedure é a seguinte:

CREATE PROCEDURE P_SEQUENCIA (
ANO INTEGER,
TIPO CHAR(1) CHARACTER SET NONE,
CODSECR CHAR(2) CHARACTER SET NONE,
CODDPTO CHAR(2) CHARACTER SET NONE,
TIPO_DOC CHAR(2) CHARACTER SET NONE)
RETURNS (
SEQ INTEGER)
AS
BEGIN
SELECT MAX(P30_SEQ) FROM APRO030
WHERE P30_ANO = :ANO AND
P30_TIPO = :TIPO AND
P30_CODSECR = :CODSECR AND
P30_CODDPTO = :CODDPTO AND
P30_TIPODOC = :TIPO_DOC
INTO :SEQ;
IF (:SEQ IS NULL) THEN BEGIN
SEQ=CAST(:TIPO_DOC||´00001´ AS INTEGER);
INSERT INTO APRO030 VALUES
(:ANO,:TIPO,:SEQ,:CODSECR,:CODDPTO,:TIPO_DOC);
END
ELSE BEGIN
SEQ = SEQ + 1;
UPDATE APRO030 SET P30_SEQ = :SEQ
WHERE P30_ANO = :ANO AND
P30_TIPO = :TIPO AND
P30_CODSECR = :CODSECR AND
P30_CODDPTO = :CODDPTO AND
P30_TIPODOC = :TIPO_DOC;
END
END


Responder

Posts

03/02/2003

Anonymous

kra, vc pode gravar com dados diretamente, ao inves de usar uma variavel, tente o seguinte

CREATE PROCEDURE P_SEQUENCIA (
ANO INTEGER,
TIPO CHAR(1) CHARACTER SET NONE,
CODSECR CHAR(2) CHARACTER SET NONE,
CODDPTO CHAR(2) CHARACTER SET NONE,
TIPO_DOC CHAR(2) CHARACTER SET NONE)
RETURNS (
SEQ INTEGER)
AS
BEGIN
SELECT MAX(P30_SEQ) FROM APRO030
WHERE P30_ANO = :ANO AND
P30_TIPO = :TIPO AND
P30_CODSECR = :CODSECR AND
P30_CODDPTO = :CODDPTO AND
P30_TIPODOC = :TIPO_DOC
INTO :SEQ;
[u:340e38be10] IF (:SEQ IS NULL) THEN BEGIN
INSERT INTO APRO030 VALUES
(:ANO,:TIPO,1,:CODSECR,:CODDPTO,:TIPO_DOC);
END [/u:340e38be10] ELSE BEGIN
SEQ = SEQ + 1;
UPDATE APRO030 SET P30_SEQ = :SEQ
WHERE P30_ANO = :ANO AND
P30_TIPO = :TIPO AND
P30_CODSECR = :CODSECR AND
P30_CODDPTO = :CODDPTO AND
P30_TIPODOC = :TIPO_DOC;
END
END


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar