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 NULLTombol 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.