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

Mengapa kami tidak dapat menjalankan prosedur tersimpan dalam pernyataan pilih di Oracle? apakah ada alasan yang kuat?

Prosedur tidak diperbolehkan dalam pernyataan SQL karena mencampur gaya pemrograman deklaratif dan imperatif membingungkan.

Pernyataan SQL adalah daftar kondisi - terserah Oracle untuk memutuskan bagaimana menghasilkan set hasil yang cocok dengan kondisi tersebut. Prosedur tersimpan PL/SQL adalah sekumpulan instruksi yang mengubah banyak hal dengan cara yang sangat dapat diprediksi.

Pada contoh di bawah ini, berapa kali harus pr dieksekusi? Apakah dieksekusi sebelum atau sesudah id = 1 ? Jika pernyataan SQL memiliki urutan yang telah ditentukan sebelumnya, maka pengoptimal tidak akan dapat mendorong predikat, menggabungkan subkueri, dll., dan kinerja tidak dapat diterima.

select *
from table1
where id = 1
    and pr;

Bahkan jika prosedur digunakan dalam select daftar, itu mungkin tidak masuk akal. Misalnya, select daftar di dalam exists selalu diabaikan.

select * from dual where exists (select pr from dual);

Namun dalam kenyataannya pernyataan SQL terkadang perlu berinteraksi dengan dunia luar, dan beberapa logika prosedural diperlukan. Fungsi diperbolehkan karena biasanya hanya menghitung sesuatu dan mengembalikan nilai. Fungsi biasanya tidak bergantung pada status program dan memiliki banyak efek samping. Fungsi Anda bisa gunakan variabel sesi, perbarui tabel (jika disetel ke PRAGMA AUTONOMOUS TRANSACTION ), mengatur konteks, dll. Oracle tidak dapat menghentikan Anda melakukan hal-hal itu, tetapi prosedur pelarangan dalam pernyataan SQL setidaknya akan mencegah kode tersebut.



  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 RAC N+1 Redundansi

  2. Pilih yang berbeda ... gabung dalam vs. pilih ... di mana id di (...)

  3. Oracle diff:bagaimana cara membandingkan dua tabel?

  4. Secara otomatis mengisi tanggal di tabel oracle

  5. Mengurai nama tabel dan kolom dari SQL/HQL Java