Warum bekomme ich PLS-00302: Komponente deklariert werden muss, wenn es existiert?

Ich bin mit Oracle 10.2.

Arbeite ich in einigen scripts zu bewegen, einige ORACLE-Objekte von einem SCHEMA (S1) zu einem anderen (S2).
Ich bin mit der Erstellung der Funktionen mit einer DBA-Rolle werden.
Wenn Sie verschoben, eine meiner Funktionen, ungültig, aber ich verstehe nicht warum.
Ihr code geht in diese Richtung:

MY_FUNC

CREATE OR REPLACE FUNCTION S2."MY_FUNC" RETURN VARCHAR2 IS
   something VARCHAR2;
   othervar VARCHAR2 (50):= 'TEST';   
BEGIN
   something := S2.MY_FUNC2();
    /*some code*/
    return othervar;
END;
/

Wenn ich MY_FUNC2 ohne das schema, Es funktioniert:

something := MY_FUNC2(); statt something := S2.MY_FUNC2();

My_FUNC2

CREATE OR REPLACE FUNCTION S2."MY_FUNC2" RETURN VARCHAR2 IS
       something BOOLEAN;
       othervar VARCHAR2 (50) := 'TEST2';           
    BEGIN
       /*some code*/
        return othervar;
    END;
    /

MY_FUNC2 hat ein synonym, wie diese:

 CREATE OR REPLACE PUBLIC SYNONYM "MY_FUNC2" FOR "S2"."MY_FUNC2"

MY_FUNC kompiliert mit Fehler:

PLS-00302: Komponente 'MY_FUNC2' muss deklariert werden

Ich verstehe nicht, warum ich diese Fehlermeldung bekommen, wenn meine Funktionen wurden in das andere schema (S1) Sie hatte genau die gleiche Struktur und das synonym wurde exakt der gleichen (aber zeigt auf S1) und MY_FUNC zusammengestellt in Ordnung.

Ich nicht erstellen, die diese Funktionen und ursprünglich synonym. Ist es möglich, dass ich bin fehlen einige Privilegien in S2, so MY_FUNC richtig arbeiten kann?

  • rufen Sie die Funktion von s1 oder s2?
  • Wenn Sie den Aufruf von s1, die Sie brauchen zu geben, die grant execute-Privileg auf s2.MY_FUNC2 zu s1.
  • soweit ich das verstanden habe ist dies nicht zu nennen, es gar nicht kompilieren. Also nur um sicher zu gehen, denn es ist nicht klar, aus Ihrer Frage. Sie sind angemeldet als sys oder s2? Zuerst erstellt MY_FUNC2, dann erstellt public synonym, und dann MY_FUNC? WENN Sie SYS oder S2 mit create public synonym-Privileg und hat es in dieser Reihenfolge gibt es keinen Grund, nicht zu kompilieren (ausser, dass my_func Erklärung hat varchar2; ohne Genauigkeit)
  • alles ist in S2, und ich bin angemeldet mit einer DBA-Rolle werden. Die Frage war, wie unten beschrieben von Alex.
  • Eine ANDERE LÖSUNG: stackoverflow.com/questions/2834596/...
InformationsquelleAutor Dzyann | 2015-02-24
Schreibe einen Kommentar