Domanda

Il mio Scenario:

  • Nome schema : schema1
  • Nome del pacchetto : pkg_system
  • nome procedura : proc1

Ora sto cercando di creare un sinonimi di mia proc1 come di seguito

CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1;

... ma mi ha dato errore di sintassi.

ORA-00933: SQL command not properly ended

ho cambiato il codice, come di seguito:

CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;

posso creare con successo i sinonimi, ma quando ho cercato di eseguire la stored procedure tramite il sinonimo:

EXEC call_proc

... ha ottenuto il seguente errore:

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 ho usato il nome dello schema di chiamare la procedura come schema1.call_Proc ancora ottenuto lo stesso errore.

Quello che ho fatto di sbagliato qui?

È stato utile?

Soluzione

Un modo per aggirare questa limitazione, supponendo che si ha realmente bisogno di chiamare la procedura con un unico nome (per qualsiasi motivo), si potrebbe avvolgere in una procedura a livello di schema:

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

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;

Altri suggerimenti

qui

Restrizioni sulla clausola for L'oggetto schema non può essere contenuta in un pacchetto.

In altre parole, non è possibile creare un sinonimo per una procedura di pacchetto.

ho visto soluzioni in cui viene creata una procedura di involucro (non confezionati) e un sinonimo pubblico creato per questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top