Frage

Ihr Szenario:

  • Schemaname : schema1
  • Paketname : pkg_system
  • Prozedurnamen : proc1

Jetzt versuche ich, einen Synonyme für meine proc1 wie unten

erstellen
CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1;

... aber es gab mir Syntaxfehler.

ORA-00933: SQL command not properly ended

Ich änderte den Code wie folgt:

CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;

Ich kann erfolgreich die Synonyme erstellen, aber wenn ich versuche, die gespeicherte Prozedur über das Synonym auszuführen:

EXEC call_proc

... bekam die folgenden Fehler:

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

Und ich verwenden, um die Schemanamen das Verfahren wie schema1.call_Proc noch den gleichen Fehler hätte zu nennen.

Was ich tat, falsch hier?

War es hilfreich?

Lösung

Eine Möglichkeit, diese Einschränkung zu umgehen, vorausgesetzt, Sie sind wirklich das Verfahren mit einem einzigen Namen anrufen müssen (warum auch immer), könnten Sie es in einem Schema-Level-Verfahren wickeln:

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

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;

Andere Tipps

Beachten Sie hier

Beschränkung auf die FOR-Klausel Das Schema-Objekt kann nicht in einem Paket enthalten sein.

Mit anderen Worten, man kann nicht ein Synonym für ein Paket Verfahren erstellen.

Ich habe Lösungen gesehen, wo eine Wrapper-Prozedur (nicht verpackt) erstellt wird und ein öffentliches Synonym dafür erstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top