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

Pernyataan FORALL Dengan Klausa Terikat INDICES-OF Dalam Database Oracle

Mengapa Pernyataan FORALL Dengan INDICES OF Bound Clause?

Pernyataan FORALL dengan klausa Batas Bawah &Atas mungkin merupakan cara termudah untuk memproses data massal hingga kami mereferensikan koleksi yang padat. Dalam hal koleksi jarang, klausa Batas Bawah &Atas tidak kuat. Juga, sayangnya dalam skenario kehidupan nyata, peluang bekerja dengan koleksi padat jauh lebih rendah daripada bekerja dengan koleksi jarang.

Omong-omong, jika Anda penasaran maka kami telah melakukan demonstrasi. Lihat apa yang terjadi ketika kami menggunakan klausa Batas bawah &atas dari pernyataan FORALL dengan koleksi yang jarang dalam video di saluran YouTube kami di sini.

Kekurangan dari klausa batas bawah &atas dari pernyataan FORALL adalah tidak dapat digunakan dengan koleksi yang jarang. Kekurangan ini dapat dengan mudah diatasi dengan menggunakan opsi seperti ‘Indices-of ' atau 'Nilai-dari ' klausa terikat. Tutorial ini adalah tentang opsi sebelumnya.

INDICES-OF klausa Terikat

Mirip dengan klausa Batas bawah &atas klausa INDICES-OF membantu kami dalam pemrosesan data massal dengan memungkinkan kami mengulangi koleksi. Satu-satunya perbedaan adalah bahwa dengan menggunakan klausa INDICES OF kita dapat melakukan iterasi melalui koleksi padat dan jarang. Sedangkan klausa Batas Bawah &Atas hanya berfungsi dengan kumpulan yang padat.

Sintaks INDICES OF klausa terikat

FORALL index IN INDICES OF collection_variable
[SAVE EXCEPTION]
DML statements; 

Dimana:

UNTUK adalah kata kunci yang dicadangkan Oracle Database diikuti dengan Indeks. Indeks ini adalah penghitung loop yang didefinisikan secara implisit yang dideklarasikan oleh mesin PL/SQL. Setelah itu Anda harus menulis kata kunci lain yaitu IN. Diikuti oleh kata kunci IN, kami memiliki klausa terikat kami yaitu INDICES OF.

Tepat setelah menulis frasa khusus 'INDICES OF' kita harus menentukan variabel koleksi dari koleksi yang datanya ingin kita gunakan. Kita sudah tahu bahwa kita mereferensikan koleksi dalam program melalui variabel koleksinya. Diikuti oleh kami memiliki opsi SIMPAN PENGECUALIAN ini adalah pilihan opsional. Kemudian kami memiliki pernyataan DML, ini bisa berupa pernyataan DML atau pernyataan MERGE.

Pastikan bahwa pernyataan DML atau pernyataan MERGE yang Anda gunakan dengan FORALL harus mereferensikan suatu koleksi. Pernyataan FORALL juga hanya dapat memproses satu pernyataan DML atau MERGE sekaligus.

Contoh INDICES OF klausa terikat

Di sini kita akan melihat demonstrasi klausa INDICES OF terikat dengan pernyataan FORALL. Di sini kita akan mengambil data dari tabel bersarang jarang yang sudah diinisialisasi dan menyimpannya ke dalam tabel.

Seperti yang kita pelajari di tutorial sebelumnya bahwa pernyataan FORALL mengambil data dari koleksi dan menyimpannya ke dalam sebuah tabel. Jadi pertama-tama kita akan membuat tabel.

SET SERVEROUTPUT ON;
CREATE TABLE tut_78(
    mul_tab NUMBER(5)
);

Untuk memudahkan demonstrasi, kami membuat tabel yang sangat sederhana dengan nama tut_78. Tabel ini hanya memiliki satu kolom mul_tab dari NUMBER tipe data.

DECLARE
    TYPE my_nested_table IS TABLE OF number;
    var_nt my_nested_table := my_nested_table (9,18,27,36,45,54,63,72,81,90);
    --Another variable for holding total number of record stored into the table 
    tot_rec NUMBER;
BEGIN
    var_nt.DELETE(3, 6);
    
    FORALL idx IN INDICES OF var_nt
        INSERT INTO tut_78 (mul_tab) VALUES (var_nt(idx));
        
    SELECT COUNT (*) INTO tot_rec FROM tut_78;
    DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec);
END;
/

Anda dapat menemukan penjelasan rinci dari kode di atas dalam video tutorial. Tapi tetap saja mari kita dapatkan penjelasan singkat di sini juga.

Bagian deklarasi dari PL/SQL Block di atas

Di sini, di bagian ini, pertama-tama kita membuat tabel bersarang dengan nama ‘my_nested_table '. Itu memegang data tipe data NUMBER. Kemudian kami mendeklarasikan variabel koleksinya ‘var_nt '. Dengan menggunakannya, kami menginisialisasi 10 indeks pertama dengan menyimpan 10 elemen numerik ke dalam koleksi kami.

Selain Nested Table dan variabel koleksinya, kami juga mendeklarasikan variabel tambahan ‘tot_rec ' dari tipe data angka. Variabel ini akan digunakan untuk menampung jumlah total data yang akan disimpan ke dalam tabel.

Bagian Eksekusi

Jika Anda melihat pernyataan pertama di bagian eksekusi. Anda akan menemukan bahwa menggunakan metode koleksi DELETE Saya telah menghapus data dari indeks 3 ke indeks 6. Ini berarti bahwa sekarang indeks koleksi kami tidak diisi secara berurutan. Itu mengubah sifat koleksi kami dari PADAT menjadi SPARSE.

Tepat setelah metode pengumpulan DELETE panggilan, kami memiliki pernyataan FORALL kami dengan klausa terikat INDICES OF. Dengan menggunakan pernyataan ini kami memasukkan ke dalam koleksi 'my_nested_table' ke dalam tabel tut_78.

Kemudian kita memiliki pernyataan SELECT-INTO. Pernyataan ini mengembalikan jumlah total baris yang dimasukkan ke dalam tabel tut_78 dan menyimpan nilai tersebut ke dalam variabel tot_rec. Kemudian menggunakan pernyataan DBMS_OUTPUT kami menampilkan kembali nilai yang disimpan ke dalam variabel tot_rec dengan string yang diformat ke pengguna.

Saya sangat menyarankan Anda untuk menonton tutorial ini di saluran YouTube saya untuk penjelasan mendalam tentang kode yang dibahas di atas. Juga, jangan lupa untuk berlangganan saluran untuk tutorial menarik lainnya.

Terima kasih itulah tutorial PL/SQL tentang cara melakukan pemrosesan data massal menggunakan pernyataan FORALL dengan klausa terikat INDICES OF. Semoga Anda menikmati membaca jika demikian maka bagikan blog ini di Media Sosial Anda. 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. 2 Fungsi yang Mengembalikan Detik dari Nilai Datetime di Oracle

  2. Apa yang dimaksud dengan simbol SQL Select || berarti?

  3. Cara menggunakan Oracle Associative Array dalam kueri SQL

  4. Oracle:apakah ada alasan logis untuk tidak menggunakan eksekusi paralel dengan subquery dalam daftar SELECT?

  5. Pemberitahuan perubahan Oracle Database