Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum erhalte ich PLS-00302:Komponente muss deklariert werden, wenn sie vorhanden ist?

Sie können diesen Fehler erhalten, wenn Sie ein Objekt mit demselben Namen wie das Schema haben. Zum Beispiel:

create sequence s2;

begin
  s2.a;
end;
/

ORA-06550: line 2, column 6:
PLS-00302: component 'A' must be declared
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored

Wenn Sie sich auf S2.MY_FUNC2 beziehen Der Objektname wird aufgelöst, sodass nicht versucht wird, S2 als Schemanamen auszuwerten. Wenn Sie es einfach als MY_FUNC2 aufrufen Es gibt keine Verwirrung, also funktioniert es.

Die Dokumentation erklärt die Namensauflösung. Der erste Teil des qualifizierten Objektnamens – hier S2 – wird als Objekt im aktuellen Schema ausgewertet, bevor es als anderes Schema ausgewertet wird.

Es ist möglicherweise keine Sequenz; andere Objekte können denselben Fehler verursachen. Sie können das Vorhandensein von Objekten mit demselben Namen überprüfen, indem Sie das Datenwörterbuch abfragen.

select owner, object_type, object_name
from all_objects
where object_name = 'S2';