Erro ao executar pkg no bloco anonimo

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Senhores,

Preciso de uma ajuda!

Tenho uma package que está sendo compilada normalmente, mas ao substituir sua assinatura por um DECLARE para executá-la em um bloco anônimo recebo a seguinte mensagem de erro:

Selecionar tudo


PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

begin function package pragma procedure form


Já pesquisei sobre esse erro e as informações que eu tenho são as seguintes:

PLS-00103 found 'string' but expected one of the following: 'string'"},

Cause: This error message is from the parser. It found a token (language element) that is inappropriate in this context.

Action: Check previous tokens as well as the one given in the error message. The line and column numbers given in the error message refer to the end of the faulty language construct.
* Que para procedures sem parâmetros deve ser utilizado o "AS";
* Falta ponto e vírgula (";");

Eu procurei no código por busca de falhas, mas não encontrei. Mas acredito que se tivesse de fato algum erro de sintaxe, daria erro na hora de compilar o objeto também, correto?

Alguém pode me ajudar?

Grato.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Hum,
não sei, mas me parece que uma package não seria o melhor candidato para se transformar em bloco anonimo.
Já tentou criar uma mini package bem simples e converter o código da package body em um bloco anônimo?
Talvez o melhor seria desenvolver blocos anônimos chamando métodos da package.
Abraços,
Sergio coutinho
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Obrigado Coutinho, mas consegui resolver e acho que entendi o que estava errado.

Vou tentar explicar melhor que eu acredito que não tenha ficado muito claro.

Eu tenho um pkg body e no corpo dessa pkg eu tenho types, cursores, procedures e functions, ela começa com a assinatura normal para a criação de uma pkg e é encerrada.
Ao compilá-la não estava dando erro algum, mas ao substituir a sua assinatura por um DECLARE afim de criar o bloco anônimo era apresentado o erro informado no post anterior.

Como esse código é relativamente grande comecei analisá-lo com o intuito de descobrir o que estava acontecendo através da eliminação das possibilidades de erro. A minha desconfiança é que deveria ter algum bloco que não tinha sido encerrado corretamente, mas não foi localizado, depois pensei que não faria muito sentido senão também daria erro de compilação.

Por fim no meu teste, resolvi colocar ao final da ultima linha um BEGIN/END com um DBMS_OUTPUT.PUTLINE dentro e funcionou!

Quer dizer fazendo uma comparação dos códigos da criação da pkg com o bloco anônimo ficou assim:

Selecionar tudo


PACKAGE BODY

CREATE OR REPLACE PKG <TST_PKG>
AS

[CÓDIGO... (TYPES,CURSORES,PROCEDURES,FUNCTIONS)]

END <TST_PKG> ;

Selecionar tudo


BLOCO ANONIMO

DECLARE

[CÓDIGO... (TYPES,CURSORES,PROCEDURES,FUNCTIONS)]

BEGIN

DBMS_OUTPUT.PUTLINE('TESTE');

END;

Ou seja, ao rodar o bloco anonimo com a mesma estrutura utilizada para criar a pkg, não estava sendo localizado o ínicio do bloco (BEGIN).

Abç.,
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes