Erro em Stored Procedure.

Firebird

17/12/2011

Saudações pessoal.

Estou tentando criar uma stored procedure para atualizar o contador do código da tabela pessoas.

Abaixo segue o código da tabela.

/* Table: PESSOAS, Owner: SYSDBA */

CREATE TABLE PESSOAS 
(
  CODIGO	INTEGER NOT NULL,
  NOME	VARCHAR(100) NOT NULL,
  LOGIN	VARCHAR(20),
  SENHA	VARCHAR(8),
  ESTADO	VARCHAR(2),
  CIDADE	VARCHAR(50),
  BAIRRO	VARCHAR(50),
  ENDERECO	VARCHAR(100),
  TELEFONE	VARCHAR(20),
  CELULAR	VARCHAR(20),
  ADM	CHAR(1) NOT NULL,
  BATIDA1	TIMESTAMP,
  BATIDA2	TIMESTAMP,
  BATIDA3	TIMESTAMP,
  BATIDA4	TIMESTAMP,
 PRIMARY KEY (CODIGO)
);


Em seguida criei a generator:

CREATE GENERATOR GEN_PESSOAS;


E agora tento criar a SP abaixo:

CREATE PROCEDURE GET_PESSOA RETURNS(P_VALOR INTEGER)
AS
BEGIN
    P_VALOR = GEN_ID(GEN_PESSOAS,1);
    SUSPEND;
END


O seguinte erro é retornado:

Dynamic SQL Error
SQL error code = -104
Unexpected end of command
Statement: CREATE PROCEDURE GET_PESSOA RETURNS(P_VALOR INTEGER)
AS
BEGIN
P_VALOR = GEN_ID(GEN_PESSOAS,1)

Agradeço desde já a atenção de todos.

Grato!
Mario Junior

Mario Junior

Curtidas 0

Respostas

Gustavo Bretas

Gustavo Bretas

17/12/2011

Codifick

Eu não estou com um banco firebird aqui para confirmar, mas vc ja tentou sem o SUSPEND?
eu lembro que só usava SUSPEND quando o retorno era um conjunto de dados.

Segue um help de generator: http://www.firebirdsql.org/manual/generatorguide.html

Mas agora eu tenho uma pergunta, se vc esta usando generator, pq fazer uma procedure para chamar cada um?

Abraço!
GOSTEI 0
Mario Junior

Mario Junior

17/12/2011

Bretas

Já tentei sim sem o SUSPEND; e o mesmo erro persiste.
GOSTEI 0
Gustavo Bretas

Gustavo Bretas

17/12/2011

Não esta faltando um : (Dois pontos) na variável?

CREATE PROCEDURE GET_PESSOA RETURNS(P_VALOR INTEGER)
AS
BEGIN
:P_VALOR = GEN_ID(GEN_PESSOAS,1);
SUSPEND;
END
GOSTEI 0
Mario Junior

Mario Junior

17/12/2011

Bretas,

Testei a sua sugestão e continua apresentando o mesmo erro.

Grato!
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

17/12/2011

o problema é o ponto-e-vírgula, que finaliza um comando.
quando você põe o ponto-e-evírgula, o mecanismo acha que o comando acabou ali.

tente assim:

SET TERM ^ ;

CREATE PROCEDURE GET_PESSOA RETURNS(P_VALOR INTEGER)
AS
BEGIN
	P_VALOR = GEN_ID(GEN_PESSOAS,1)^
END

SET TERM ; ^


com isso você troca o terminador de comandos para o circunflexo, e depois retorna para ponto-e-vírgula
GOSTEI 0
Mario Junior

Mario Junior

17/12/2011

Emerson,


O mesmo erro persiste. Infelizmente, mas obrigado pela ajuda. Estou tentando outras alternativas, mas até agora sem sucesso.
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

17/12/2011

Já tentou assim?
CREATE PROCEDURE GET_PESSOA RETURNS(P_VALOR INTEGER)
 AS
BEGIN
 P_VALOR = GEN_ID(GEN_PESSOAS, 1);
END;


Boa sorte e bons códigos.
GOSTEI 0
POSTAR