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í?

¿Fue útil?

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

aquí

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top