Możesz otrzymać ten błąd, jeśli masz obiekt o tej samej nazwie co schemat. Na przykład:
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
Kiedy odwołujesz się do S2.MY_FUNC2
nazwa obiektu jest rozpoznawana, więc nie próbuje ocenić S2 jako nazwy schematu. Kiedy nazywasz to po prostu jako MY_FUNC2
nie ma zamieszania, więc to działa.
Dokumentacja wyjaśnia rozwiązywanie nazw. Pierwszy element kwalifikowanej nazwy obiektu — tutaj S2 — jest oceniany jako obiekt w bieżącym schemacie, zanim zostanie oceniony jako inny schemat.
To może nie być sekwencja; inne obiekty mogą powodować ten sam błąd. Możesz sprawdzić istnienie obiektów o tej samej nazwie, odpytując słownik danych.
select owner, object_type, object_name
from all_objects
where object_name = 'S2';