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.