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

Oracle PL/SQL - Koleksi (Tabel Bersarang)

Dalam tutorial ini, Anda akan mempelajari cara mendeklarasikan dan menginisialisasi koleksi Oracle PL/SQL (Tabel Bersarang).

Oracle PL/SQL - Tabel bersarang

Tabel bersarang sangat mirip dengan tabel PL/SQL, yang dikenal di Oracle sebagai index-by tabel. Tabel bersarang memperluas fungsionalitas index-by tabel dengan menambahkan metode pengumpulan tambahan (dikenal sebagai atribut tabel untuk index-by tabel) dan dengan menambahkan kemampuan untuk menyimpan tabel bersarang di dalam tabel database, itulah sebabnya tabel tersebut disebut tabel bersarang.

Tabel bertingkat juga dapat dimanipulasi secara langsung menggunakan SQL, dan memiliki pengecualian standar tambahan yang tersedia.

Selain fitur tambahan ini, fungsionalitas dasar tabel bersarang sama dengan tabel PL/SQL. Tabel bersarang dapat dianggap sebagai tabel database dengan dua kolom-kunci dan nilai. Seperti index-tables , tabel bersarang bisa jarang, dan kuncinya tidak harus berurutan.

Mendeklarasikan Tabel Bersarang

Sintaks untuk membuat tipe tabel bersarang adalah

JENIS nama_tabel  adalah TABEL table_type  [BUKAN NULL];

di mana table_name adalah nama tipe baru, dan table_type adalah tipe setiap elemen dalam tabel bersarang. Table_type dapat berupa tipe bawaan, tipe objek yang ditentukan pengguna, atau ekspresi menggunakan % JENIS.

Catatan

Satu-satunya perbedaan sintaksis antara tabel indeks-oleh dan tabel bersarang adalah adanya klausa INDEX BY BINARY_INTEGER. Jika klausa ini tidak ada, maka tipenya adalah tipe tabel bersarang. Jika klausa ini ada, maka tipenya adalah tipe tabel indeks.

Bagian kode deklaratif berikut menunjukkan beberapa deklarasi tabel yang valid:

DECLARE--Menentukan tipe tabel berdasarkan tipe objekTYPE t_ClassTab IS TABLE OF Classobj;--Tipe berdasarkan%ROWTYPEType t_StudentsTab IS TABLE of Students%ROWTYPE;--Variabel dari tipe di atasv_ClassList t_ClassesTab;v_StudentList t_StudentList; /pra> 

Oracle PL/SQL - Inisialisasi Tabel Bersarang

Ketika sebuah tabel dideklarasikan seperti pada blok sebelumnya, tabel tersebut diinisialisasi menjadi NULL secara atomik, seperti tipe objek. Jika Anda mencoba menetapkan ke tabel NULL, kesalahan "ORA-6531:Referensi ke koleksi yang tidak diinisialisasi " yang sesuai dengan pengecualian yang telah ditentukan COLLECTION_IS_NULL , dinaikkan.

Melanjutkan contoh sebelumnya, bagian eksekusi berikut akan memunculkan kesalahan ini:

BEGIN--Tugas ini akan meningkatkan COLLECTION_IS_NULL karena--v_ClassList secara otomatis null.v_ClassList(1) :=ClassObj ('HIS', 101, 'History 101', 30, 0, 4, NULL);END; 

Jadi bagaimana Anda menginisialisasi tabel bersarang? Ini dapat dilakukan dengan menggunakan konstruktor. Seperti konstruktor tipe objek, konstruktor untuk tabel bersarang memiliki kesamaan dengan tipe tabel itu sendiri. Namun, sebagai argumen diperlukan daftar elemen, yang masing-masing tipenya harus kompatibel dengan tipe elemen tabel.

Contoh berikut mengilustrasikan penggunaan konstruktor tabel nsat3eed:

DECLARETYPE t_NUmbersTab IS TABLE OF NUMBER;-- Buat tabel dengan satu elemen.v_Tab1 t_NumbersTab :=t_NumbersTab(-1);-- Buat tabel dengan lima elemen.v-Primes t_numbersTab :=t_NumbersTab(1, 2, 3 , 5, 7);-- Membuat tabel tanpa elemen.v_Tab2 t_NumbersTab :=t_NumbersTab();BEGIN-- Tetapkan ke v_Tab1(1). Ini akan menggantikan nilai ready-- di v_Tab(1), yang diinisialisasi ke -1.v_Tab(1) :=12345;END;

Tabel Kosong

Perhatikan deklarasi v_Tab2 di blok sebelumnya:

-- Buat tabel tanpa elemen.v_Tab2 t_NumbersTab :=t_NumbersTab();

v_Tab2 diinisialisasi dengan memanggil konstruktor tanpa argumen. Ini membuat tabel yang tidak memiliki elemen tetapi tidak NULL secara atom. Blok berikut mengilustrasikan hal ini:

DECLARETYPE t_WordsTab ADALAH TABEL VARCHAR2(50);--Membuat tabel NULL.v_Tab1 t_WordsTab;--Membuat tabel dengan satu elemen, yaitu NULL.v_Tab2 t_WordsTab :=t_WordsTab(); .PUT_LINE('v_Tab1 adalah NULL');ELSEDBMS_OUTPUT.PUT_LINE('v_Tab bukan NULL');END IF;IF v_Tab2 IS NULL THENDBMS_OUTPUT.PUT_LINE('v_Tab2 adalah NULL');ELSEDBMS_OUTPUT'('v_PUT_LINE'('v_PUTTab2'); );AKHIR JIKA;AKHIR;

Jika kita menjalankan blok ini kita mendapatkan output berikut:

v_Tab1 adalah NULLv_Tab2 bukan NULL

Tombol Saat Inisialisasi

Ketika sebuah tabel diinisialisasi menggunakan konstruktor, elemen tabel diberi nomor secara berurutan, mulai dari 1 hingga jumlah elemen yang ditentukan dalam panggilan konstruktor. Selama pemrosesan selanjutnya, nilai yang disimpan di beberapa kunci mungkin dihapus (Menggunakan metode DELETE). ketika tabel bersarang dipilih dari database, kunci dinomori ulang jika perlu agar berurutan seperti pada inisialisasi.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Manajer Konkuren Oracle

  2. Menyebarkan dan Mengonfigurasi ODP.NET agar berfungsi tanpa instalasi dengan Entity Framework

  3. PL/SQL, bagaimana cara menghindari kutipan tunggal dalam sebuah string?

  4. Mengapa menggunakan klausa JOIN versus kondisi WHERE?

  5. Jalankan Oracle Forms sebagai standalone tanpa browser