Bạn có thể gặp lỗi đó nếu bạn có một đối tượng trùng tên với lược đồ. Ví dụ:
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
Khi bạn tham khảo S2.MY_FUNC2
tên đối tượng đang được giải quyết vì vậy nó không cố gắng đánh giá S2 như một tên lược đồ. Khi bạn chỉ gọi nó là MY_FUNC2
không có sự nhầm lẫn, vì vậy nó hoạt động.
Tài liệu giải thích độ phân giải tên. Phần đầu tiên của tên đối tượng đủ điều kiện - S2 ở đây - được đánh giá là một đối tượng trên lược đồ hiện tại trước khi nó được đánh giá là một lược đồ khác.
Nó có thể không phải là một chuỗi; các đối tượng khác có thể gây ra lỗi tương tự. Bạn có thể kiểm tra sự tồn tại của các đối tượng có cùng tên bằng cách truy vấn từ điển dữ liệu.
select owner, object_type, object_name
from all_objects
where object_name = 'S2';