Fórum Erro ao Compilar Procedure #492400

16/09/2014

0

Pessoal,

estou tentando compilar uma procedure da vídeo aula do Renato Matos, porém está apresentando erro.

Script:

create procedure sp_get_gerador (pNome varchar(50)) returns (pValor integer)
as
declare variable vStm varchar(500);
begin
vStm = 'select next value for ' || pNome || ' from rdb$database';
execute statement vStm into :pValor;
suspend;
end;



Erro:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, char 9.
statement.


obs.: Se eu comento a linha ref. ao execute statement e tento compilar funciona

Estou usando o FB 2.5 / IBExpert

Alguém faz ideia o que possa ser?

abs
Paulo Brasiliense

Paulo Brasiliense

Responder

Posts

17/09/2014

Deivison Melo

Não sei o que você fez, peguei ela e rodei na minha versão e rodou blz, só fiz uma alteração básica no cabeçalho!

SET TERM ^ ;

create or alter procedure SP_GET_GERADOR (
    PNOME varchar(50))
returns (
    PVALOR integer)
as
declare variable VSTM varchar(500);
begin
  vStm = 'select next value for ' || pNome || ' from rdb$database';
  execute statement vStm
     into :pValor;
  suspend;
end^

SET TERM ; ^

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE SP_GET_GERADOR TO SYSDBA;


Abração e bons códigos!

Qualquer dúvida, por favor, postar!
Responder

Gostei + 0

17/09/2014

Paulo Brasiliense

Boa noite Deivison, e obrigado desde já pela ajuda!

Fiz um novo teste, porém sem sucesso.

Apresenta o mesmo erro:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 9, char 9.
statement.

obs.: Após a msg de erro, o curso fica posicionado entre o 't' e o 'e' do execute.

Será que poderia ser a dll do FB?

Obrigado de qq forma!
Responder

Gostei + 0

18/09/2014

Deivison Melo

https://www.devmedia.com.br/forum/add/insertpost.php?p=492400

Estranho, porquê vc disse que está usando o Firebird 2.5, as sequence's foram adicionadas a partir do Firebird 2.0, a não ser que apenas o seu servidor seja da versão 2.5 e o banco tenha sido criado em uma versão anterior a 2.0, exemplo a versão 1.5.

Esse você usará no próprio IBExpert (E aí verá a versão que seu servidor está rodando)

SELECT RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION') VERSAO 
  FROM RDB$DATABASE



Esse outro comando vc verá a página de cabeçalho do banco de dados, para isso, esteja na pasta bin do firebir,
pois a ferramenta gstat encontra-se lá.
gstat -h banco.fdb 



Veja qual a versão do ODS com o comando gstat

ODS significa On Disc Structure, que nada mais é do que o número da versão da estrutura do arquivo de banco de dados Firebird/InterBase. Sempre que há uma alteração na estrutura básica do arquivo de banco de dados (geralmente quando uma nova versão do FB é lançada), a ODS também muda.

Veja as versões da ODS para cada versão do Firebird:

Firebird 1.0 - ODS 10
Firebird 1.5 - ODS 10.1
Firebird 2.0 - ODS 11.0
Firebird 2.1 - ODS 11.1
Firebird 2.5 - ODS 11.2

Quando a mudança na estrutura não é significativa, apenas o menor número é alterado.

Até a versão 2.5, o Firebird é capaz de acessar bancos de dados com ODS de versões anteriores.

Caso a versão da ODS exibida no gstat for menor que ODS 11.0, então é porquê seu banco foi criado em uma versão anterior e não suporta sequences.

Atualmente, existe uma incompatibilidade da numeração das ODS entre o InterBase e o Firebird, ou seja, a ODS 11 do InterBase é incompatível com a ODS 11 do Firebird, etc.

Atenção: As versões 64bits do Firebird NÃO conseguem acessar bancos de dados com ODS menor que 11.1 criados em versões 32bits do Firebird. A mensagem de erro retornada é is not a valid database.

PS. Caso nao conseguir, e seja possível, disponibilize o banco em algum repositório na internet para que possa verificar o motivo da persistência do problema.

Bom, veja se isso te ajuda, qualquer anormalidade estou à disposição!

Boa sorte e bons códigos!!


Emanoel Deivison
Recife - PE
Responder

Gostei + 0

18/09/2014

Paulo Brasiliense

Boa noite Deivison!

Obrigado por toda explicação! Irei efetuar novos testes e post aqui em breve o resultado!

Espero que de certo dessa vez!

vlw
Responder

Gostei + 0

20/09/2014

Deivison Melo

Sempre as ordens!

Por favor, postar se as orientações te ajudaram para que possa finalizar o tópico!

Abração e bons códigos!!!
Responder

Gostei + 0

22/09/2014

Paulo Brasiliense

Boa noite Deivison!

Desculpe na demora da resposta. Ando enrolado com o trabalho.

Teste ontem a noite e era isso mesmo.

Como estou apenas treinando, criei outro banco em versão compatível e funcionou.

Obrigado pela ajuda.

abs
Responder

Gostei + 0

23/09/2014

Deivison Melo

Qualquer dúvida estamos a disposição!

Atenciosamente,

Emanoel Deivison
Recife - PE
Responder

Gostei + 0

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

Aceitar