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

ORA-06508:PL/SQL:tidak dapat menemukan unit program yang dipanggil

Saya menduga Anda hanya melaporkan kesalahan terakhir dalam tumpukan seperti ini:

ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package"
ORA-06508: PL/SQL: could not find program unit being called: "schema.package"

Jika demikian, itu karena paket Anda stateful:

Nilai variabel, konstanta, dan kursor yang dideklarasikan oleh sebuah paket (baik dalam spesifikasi atau isi) terdiri dari keadaan paket . Jika paket PL/SQL mendeklarasikan setidaknya satu variabel, konstanta, atau kursor, maka paket tersebut status; jika tidak, itu tanpa kewarganegaraan .

Saat Anda mengkompilasi ulang statusnya hilang:

Jika badan dari paket stateful yang diinstantiasi dikompilasi ulang (baik secara eksplisit, dengan "Pernyataan ALTER PACKAGE", atau secara implisit), pemanggilan subprogram berikutnya dalam paket menyebabkan Oracle Database untuk membuang status paket yang ada dan meningkatkan pengecualianORA-04068.

Setelah PL/SQL memunculkan eksepsi, referensi ke paket menyebabkan Oracle Database menginisialisasi ulang paket, yang menginisialisasi ulang...

Anda tidak dapat menghindari ini jika paket Anda memiliki status. Saya pikir cukup jarang untuk benar-benar membutuhkan paket untuk menjadi stateful, jadi Anda harus mengunjungi kembali apa pun yang telah Anda nyatakan dalam paket, tetapi di luar fungsi atau prosedur, untuk melihat apakah itu benar-benar diperlukan pada tingkat itu. Karena Anda menggunakan 10g, itu termasuk konstanta, bukan hanya variabel dan kursor.

Tetapi paragraf terakhir dari dokumentasi yang dikutip berarti bahwa lain kali Anda mereferensikan paket di sesi yang sama, Anda tidak akan mendapatkan kesalahan dan itu akan berfungsi seperti biasa (sampai Anda mengkompilasi ulang lagi).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana kita bisa menentukan ukuran parameter output dalam prosedur tersimpan?

  2. Bagaimana cara membuat tabel Oracle dengan tabel tipe objek bersarang?

  3. Alternatif agnostik versi Oracle ODP.NET

  4. Apakah COUNT(rowid) Lebih Cepat Dari COUNT(*)?

  5. Kebuntuan di Oracle