Pergunta

Meu cenário:

  • Nome do esquema: esquema1
  • Nome do pacote: pkg_system
  • Nome do procedimento: Proc1

Agora estou tentando criar sinônimos para o meu proc1 como abaixo

CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1;

... mas isso me deu erro de sintaxe.

ORA-00933: SQL command not properly ended

Eu mudei o código como abaixo:

CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;

Posso criar com sucesso os sinônimos, mas quando tentei executar o procedimento armazenado através do sinônimo:

EXEC call_proc

... Recebi o seguinte erro:

ORA-06550: line 1, column 7:
PLS-00201: identifier call_proc must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

E usei o nome do esquema para chamar o procedimento como schema1.call_Proc ainda recebeu o mesmo erro.

O que eu fiz de errado aqui?

Foi útil?

Solução

Uma maneira de contornar essa limitação, supondo que você realmente precise chamar o procedimento com um único nome (por qualquer motivo), você pode envolvê-lo em um procedimento no nível do esquema:

CREATE PROCEDURE schema1.proc1 IS
BEGIN
   pkg_system.proc1;
END;

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;

Outras dicas

Observação aqui

Restrição na cláusula forO objeto de esquema não pode ser contido em um pacote.

Em outras palavras, você não pode criar um sinônimo para um procedimento de pacote.

Vi soluções em que um procedimento de wrapper (não embalado) é criado e um sinônimo público criado para isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top