Oracle tema sinónimos
Pregunta
Mi Escenario:
- Nombre de esquema : SCHEMA1
- Nombre del paquete : pkg_system
- nombre del procedimiento : proc1
Ahora estoy tratando de crear una sinónimos de mi proc1 de la siguiente manera
CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1;
... pero me dio error de sintaxis.
ORA-00933: SQL command not properly ended
Me cambió el código de la siguiente manera:
CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;
Puedo crear con éxito los sinónimos pero cuando intenté ejecutar el procedimiento almacenado mediante el sinónimo:
EXEC call_proc
... tiene el siguiente error:
ORA-06550: line 1, column 7:
PLS-00201: identifier call_proc must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Y utiliza el nombre de esquema para llamar al procedimiento como schema1.call_Proc
todavía tiene el mismo error.
Lo que hice mal aquí?
Solución
Una forma de superar esta limitación, suponiendo que realmente necesita para llamar al procedimiento con un solo nombre (por cualquier razón), se puede envolver en un procedimiento a nivel de esquema:
CREATE PROCEDURE schema1.proc1 IS
BEGIN
pkg_system.proc1;
END;
CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;
Otros consejos
Restricción de la cláusula El objeto de esquema no puede estar contenida en un paquete.
En otras palabras, no se puede crear un sinónimo para un procedimiento de paquete.
he visto soluciones en las que se crea un procedimiento contenedor (no envasados) y un sinónimo público creado para ello.