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

ORA-04061:status badan paket PACKAGE.NAME yang ada telah dibatalkan tetap ada

Oracle melakukan ini karena mengkompilasi ulang paket PL/SQL membatalkan variabel sesi apa pun yang digunakan.

Tidak banyak yang bisa kita lakukan untuk menghindari hal ini, kecuali dengan menggunakan praktik penerapan yang baik. Jangan menerapkan perubahan saat database sedang digunakan, pastikan semua koneksi terputus dengan benar, dll. Lebih mudah diucapkan daripada dilakukan di era CI/CD ini, tanpa downtime, dan inovasi menarik lainnya.

Jadi ada satu hal di belakang loker:pragma serially_reusable; . Instruksi ini berarti status paket dipertahankan selama panggilan server tunggal . Misalnya jika kita memiliki blok PL/SQL yang memanggil prosedur SR tiga kali, variabel apa pun yang diubah oleh prosedur itu akan menjalankan nilai di tiga panggilan. Namun saat berikutnya kita menjalankan blok - dalam sesi yang sama - variabel akan disetel ulang ke nilai awalnya.

Ada beberapa batasan untuk PL/SQL yang dapat digunakan kembali secara serial - misalnya, tidak dapat digunakan dalam kueri SQL. Tetapi daya tarik besar dari sudut pandang Anda bukan lagi kesalahan ORA-04068 atau ORA-04061. Tidak ada status sesi, tidak ada yang dibatalkan.

pragma serially_reusable harus dideklarasikan pada tingkat paket, dan di dalam badan serta spesifikasi. Jadi, Anda harus yakin bahwa tidak ada prosedur paket yang perlu mempertahankan status di seluruh panggilan server.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang setara dengan PostgreSQL dari SYSDATE dari Oracle?

  2. Metode Pengaturan Parameter NLS dan Prioritasnya (Oracle Database)

  3. Secara otomatis menerapkan ukuran tabel basis data maksimal dengan menghapus baris lama

  4. Apa Itu Versi Utama?

  5. Oracle SQL hari pertama dan terakhir kuartal setiap tahun