Oracle Synonyme Ausgabe
Frage
Ihr Szenario:
- Schemaname : schema1
- Paketname : pkg_system
- Prozedurnamen : proc1
Jetzt versuche ich, einen Synonyme für meine proc1 wie unten
erstellenCREATE 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?
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.