Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengapa saya mendapatkan PLS-00302:komponen harus dideklarasikan ketika ada?

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';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle 10g menerima 5 digit tahun dalam satu Tanggal

  2. ORA-01830:gambar format tanggal berakhir sebelum mengonversi seluruh string input / Pilih jumlah di mana kueri tanggal

  3. ORA-24408:tidak dapat menghasilkan nama grup server yang unik

  4. Mendeklarasikan &Mengatur Variabel dalam Pernyataan Pilih

  5. Instal klien Oracle Instan ke dalam wadah Docker untuk Python cx_Oracle