Anda bisa mendapatkan kesalahan itu jika Anda memiliki objek dengan nama yang sama dengan skema. Misalnya:
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
Saat Anda merujuk ke S2.MY_FUNC2
nama objek sedang diselesaikan sehingga tidak mencoba mengevaluasi S2 sebagai nama skema. Saat Anda menyebutnya sebagai MY_FUNC2
tidak ada kebingungan, jadi berhasil.
Dokumentasi menjelaskan resolusi nama. Bagian pertama dari nama objek yang memenuhi syarat - S2 di sini - dievaluasi sebagai objek pada skema saat ini sebelum dievaluasi sebagai skema yang berbeda.
Ini mungkin bukan urutan; objek lain dapat menyebabkan kesalahan yang sama. Anda dapat memeriksa keberadaan objek dengan nama yang sama dengan menanyakan kamus data.
select owner, object_type, object_name
from all_objects
where object_name = 'S2';