Fórum Erro em Stored Procedure. #410700

17/12/2011

0

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

Responder

Posts

19/12/2011

Gustavo Bretas

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!
Responder

Gostei + 0

19/12/2011

Mario Junior

Bretas

Já tentei sim sem o SUSPEND; e o mesmo erro persiste.
Responder

Gostei + 0

19/12/2011

Gustavo Bretas

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
Responder

Gostei + 0

19/12/2011

Mario Junior

Bretas,

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

Grato!
Responder

Gostei + 0

22/12/2011

Emerson Nascimento

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
Responder

Gostei + 0

24/12/2011

Mario Junior

Emerson,


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

Gostei + 0

03/01/2012

Perivaldo Martins

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.
Responder

Gostei + 0

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

Aceitar