Problema do Oracle Sinônimos
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?
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.