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

Pengantar Pernyataan FORALL Dalam Database Oracle

Pemrosesan Data Massal Menggunakan Pernyataan FORALL

Saya tahu bahwa tutorial sebelumnya adalah jeda singkat dari Seri Kumpulkan Massal kami. Bagaimanapun, itu adalah tuntutan penonton dan kami memiliki kewajiban untuk memenuhinya. Tapi jangan khawatir kami kembali ke jalurnya. Jadi mari kita lihat pengantar Pemrosesan Data Massal Menggunakan pernyataan FORALL di Oracle Database.

Jika Anda tidak tahu tutorial apa yang saya bicarakan, periksa di sini. Jadi sekarang mari kita ke topik.

Apa itu pernyataan FORALL?

Pernyataan FORALL membantu memproses data massal secara optimal dengan mengirimkan pernyataan DML atau pernyataan MERGE (jika Anda menggunakan 11g atau lebih) dalam batch dari mesin PL/SQL ke mesin SQL.

Anda juga dapat mendefinisikan pernyataan FORALL sebagai konstruksi loop massal yang mengeksekusi pernyataan DML atau pernyataan MERGE satu kali atau beberapa kali sekaligus.

Pengumpulan massal mengoptimalkan kueri dan meningkatkan kinerja dengan mengurangi sakelar konteks. FORALL melakukan hal yang sama untuk pernyataan DML seperti Sisipkan, Hapus, Perbarui, atau untuk pernyataan MERGE.

Apa sintaks dari pernyataan FORALL?

Sintaksnya cukup sederhana, mari kita lihat.

FORALL index IN bound_clauses 
[SAVE EXCEPTION]
DML statement;

Dimana:

UNTUK adalah Kata Kunci Cadangan Oracle.

Indeks adalah penghitung loop yang didefinisikan secara implisit yang dideklarasikan oleh mesin PL/SQL sebagai PLS_INTEGER. Karena secara implisit didefinisikan oleh mesin PL/SQL sehingga Anda tidak perlu mendefinisikannya. Cakupan Indeks terbatas pada pernyataan FORALL di mana ia didefinisikan.

Bound_Clauses adalah klausa yang mengontrol jumlah iterasi loop. Juga nilai indeks juga tergantung padanya. Ada tiga jenis klausa terikat di Oracle PL/SQL yang akan kita bahas secara terpisah nanti dalam tutorial ini.

HEMAT PENGECUALIAN adalah pilihan opsional yang membuat pernyataan FORALL tetap berjalan bahkan ketika pernyataan DML menyebabkan pengecualian. Pengecualian ini disimpan dalam atribut kursor yang disebut SQL%Bulk_Exceptions.

Info:
Karena SAVE EXCEPTION, pernyataan FORALL tidak keluar secara tiba-tiba meskipun ada pengecualian. Ini adalah keuntungan dari pernyataan FORALL dibandingkan FOR Loop.

Pernyataan DML :Pernyataan DML dapat berupa pernyataan DML seperti INSERT, UPDATE atau DELETE. Jika Anda menggunakan Oracle 11g atau lebih tinggi, Anda juga dapat menggunakan pernyataan MERGE dengan FORALL. Namun Anda perlu memastikan bahwa pernyataan DML atau pernyataan MERGE Anda harus merujuk setidaknya satu kumpulan dalam klausa VALUES atau WHERE-nya.

Selanjutnya tidak seperti FOR Loop, dengan pernyataan FORALL kita hanya dapat menggunakan satu DML dalam satu waktu. Ini adalah kekurangan FORALL.

Apakah FORALL merupakan loop seperti FOR Loop?

Tidak, meskipun pernyataan FORALL mengulangi semua baris koleksi tetapi itu bukan perulangan FOR. Jika Anda telah melihat sintaks dengan cermat maka Anda pasti telah memperhatikan bahwa tidak seperti 'FOR Loop', blok pernyataan FORALL tidak dimulai dengan kata kunci LOOP atau diakhiri dengan kata kunci END LOOP.

Dapatkah kita menjalankan Sisipkan dan Perbarui DML sekaligus menggunakan FORALL?

Tidak, sayangnya Tidak seperti FOR Loop dengan FORALL, kami tidak dapat mengeksekusi lebih dari satu DML dalam satu waktu. Ini berarti Anda dapat menjalankan Sisipkan atau Perbarui pada saat yang tidak bersamaan. Itu adalah kekurangan dari pernyataan FORALL.

Apa yang dimaksud dengan atribut kursor SQL%Bulk_Exceptions?

Atribut kursor SQL%Bulk_Exceptions adalah kumpulan catatan yang memiliki dua bidang Error_Index dan Error_Code. Error_Index menyimpan jumlah iterasi dari pernyataan FORALL selama pengecualian telah terjadi. Di sisi lain, Error_Code menyimpan kode pengecualian yang sesuai dengan pengecualian yang diajukan.

Dapatkah kita melihat jumlah pengecualian yang terjadi selama eksekusi pernyataan FORALL?

Anda dapat dengan mudah memeriksa berapa banyak pengecualian yang muncul selama eksekusi pernyataan FORALL menggunakan SQL%BULK_EXCEPTION.COUNT.

Apakah klausa terikat itu? Beri tahu kami sesuatu tentang mereka.

Seperti disebutkan di atas, klausa Bound mengontrol nilai indeks loop dan jumlah iterasi dari pernyataan FORALL. Ada tiga jenis klausa terikat yang dapat digunakan dengan pernyataan FORALL di Oracle Database. Ini adalah:

  1. Batas Bawah &Atas
  2. Indeks dan
  3. Nilai

Batas LOW DAN UPPER :Mirip dengan FOR LOOP, dalam klausa terikat ini Anda harus menentukan awal dan akhir yang valid dari nomor indeks berurutan dari koleksi yang direferensikan.

Ini adalah suatu keharusan untuk menentukan rentang yang valid dari nomor indeks berturut-turut bersama dengan Klausul Terikat ini untuk jumlah koleksi yang dirujuk dalam pernyataan DML. Namun ada kemungkinan kesalahan jika koleksi yang dirujuk dengan klausa ini ditemukan jarang. Kesalahan yang akan Anda dapatkan adalah ini:

ORA-22160: element at index [3] does not exist

Jika koleksi referensi Anda jarang dan Anda menggunakan Oracle 10g atau lebih tinggi, maka Anda mungkin ingin menggunakan dua opsi lainnya yaitu, 'Indices-of' dan 'Values-of'.

INDIKASI :Klausa terikat kedua yang tersedia bagi kami adalah 'Index of'. Klausa terikat ini memungkinkan pernyataan FORALL kami untuk mengulang koleksi sparse seperti array asosiatif atau tabel bersarang.

Bacaan yang Disarankan:Pengantar koleksi PL/SQL

NILAI :Klausa terikat ketiga adalah Nilai. Opsi VALUES OF memperjelas bahwa nilai elemen dari kumpulan yang ditentukan dari penghitung loop adalah dasar dari nilai dalam pernyataan FORALL. Pada dasarnya, koleksi ini adalah sekelompok indeks yang dapat dilewati oleh pernyataan FORALL. Selain itu, indeks-indeks ini tidak perlu unik dan juga dapat dicantumkan dalam urutan yang sewenang-wenang.

Jika Anda belajar lebih cepat dengan menonton video tutorial, berikut ini adalah salah satu penjelasan FORALL secara detail.

Kita akan belajar bagaimana menggunakan semua klausa terikat ini dengan pernyataan FORALL di tutorial mendatang, jadi pantau terus. Untuk pembaruan terbaru, Anda dapat berlangganan saluran YouTube saya dan mengikuti saya di media sosial saya.

Terima kasih dan semoga harimu menyenangkan!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah kita memiliki banyak WITH AS dalam satu sql - Oracle SQL

  2. Oracle - Tabel klon - Struktur, batasan data, dan semuanya

  3. Memulai Oracle SQL Developer di Windows

  4. Mengubah kata sandi dengan Oracle SQL Developer

  5. Metode Pengumpulan:Fungsi SEBELUM &BERIKUTNYA Dalam Database Oracle