PL/SQL - Koleksi: Portal Anda ke Pengendalian Data yang Efisien
Hai teman-teman pemula pengembang PL/SQL! Saya sangat gembira untuk mengantar Anda ke dunia menarik koleksi PL/SQL. Sebagai guru komputer yang ramah di lingkungan sekitar Anda dengan tahun-tahun pengalaman, saya berjanji untuk membuat perjalanan ini sia-sia dan menyenangkan. Jadi, ambil notepad virtual Anda, dan mari kita masuk ke dalamnya!
Apa Itu Koleksi PL/SQL?
Sebelum kita masuk ke dalam hal-hal kecil, mari kita mengerti apa itu koleksi. Bayangkan Anda sedang mengatur pesta ulang tahun, dan Anda perlu mencatat semua tamu Anda. Bukanlah lebih mudah jika Anda memiliki daftar tunggal daripada menulis setiap nama di lembaran kertas terpisah? Itu tepat apa yang koleksi lakukan dalam PL/SQL - mereka memungkinkan kita untuk mengelompokkan data yang terkait bersama-sama.
Sekarang, mari kita jelajahi jenis koleksi yang ditawarkan PL/SQL kepada kita.
H2: Tabel Index-By (Array Asosiatif)
Tabel Index-By, juga dikenal sebagai Array Asosiatif, mirip seperti buku alamat yang magis. Daripada hanya menyimpan nama, Anda dapat menghubungkan setiap nama dengan informasi tambahan.
H3: Mendeklarasikan Tabel Index-By
Mari kita buat Tabel Index-By pertama kita:
DECLARE
TYPE guest_list_type IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(20);
guest_list guest_list_type;
BEGIN
guest_list('Alice') := 'Membawa kue';
guest_list('Bob') := 'Membawa balon';
guest_list('Charlie') := 'Membawa musik';
DBMS_OUTPUT.PUT_LINE('Alice adalah ' || guest_list('Alice'));
END;
Dalam contoh ini, kita membuat daftar tamu di mana setiap tamu (indeks) terhubung dengan apa yang mereka bawa ke pesta. Ketika kita menjalankan kode ini, itu akan menampilkan: "Alice adalah Membawa kue".
H3: Mengiterasi Melalui Tabel Index-By
Sekarang, mari kita lihat bagaimana kita dapat mengiterasi daftar tamu kita:
DECLARE
TYPE guest_list_type IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(20);
guest_list guest_list_type;
guest VARCHAR2(20);
BEGIN
guest_list('Alice') := 'Membawa kue';
guest_list('Bob') := 'Membawa balon';
guest_list('Charlie') := 'Membawa musik';
guest := guest_list.FIRST;
WHILE guest IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE(guest || ' adalah ' || guest_list(guest));
guest := guest_list.NEXT(guest);
END LOOP;
END;
Kode ini akan menampilkan semua tamu kita dan apa yang mereka bawa. Itu seperti mengikuti daftar cek pesta Anda!
H2: Tabel Bersarang
Tabel Bersarang mirip seperti daftar yang dapat diperluas. Bayangkan Anda merencanakan beberapa pesta, dan setiap pesta memiliki daftar tamu yang dapat bertambah atau berkurang.
H3: Mendeklarasikan dan Inisialisasi Tabel Bersarang
Mari kita buat tabel bersarang untuk rencana pesta kita:
DECLARE
TYPE guest_list_type IS TABLE OF VARCHAR2(50);
birthday_party guest_list_type := guest_list_type('Alice', 'Bob', 'Charlie');
BEGIN
DBMS_OUTPUT.PUT_LINE('Tamu pertama: ' || birthday_party(1));
birthday_party.EXTEND;
birthday_party(4) := 'David';
DBMS_OUTPUT.PUT_LINE('Tamu baru: ' || birthday_party(4));
END;
Di sini, kita mulai dengan tiga tamu dan kemudian menambahkan tamu keempat. Output akan menunjukkan "Tamu pertama: Alice" dan "Tamu baru: David".
H2: Metode Koleksi
Koleksi datang dengan metode bawaan yang membuat kehidupan kita mudah. Pikirkan ini sebagai kekuatan khusus untuk mengelola daftar kita.
H3: Metode Koleksi Umum
Berikut adalah tabel dari beberapa metode koleksi umum:
Metode | Deskripsi |
---|---|
COUNT | Mengembalikan jumlah elemen |
FIRST | Mengembalikan indeks elemen pertama |
LAST | Mengembalikan indeks elemen terakhir |
NEXT | Mengembalikan indeks elemen berikutnya |
PRIOR | Mengembalikan indeks elemen sebelumnya |
EXISTS | Memeriksa apakah elemen ada di indeks tertentu |
EXTEND | Menambahkan satu atau lebih elemen ke akhir koleksi |
TRIM | Menghapus satu atau lebih elemen dari akhir koleksi |
DELETE | Menghapus elemen dari koleksi |
Mari kita lihat beberapa diantaranya dalam aksi:
DECLARE
TYPE number_list_type IS TABLE OF NUMBER;
numbers number_list_type := number_list_type(10, 20, 30, 40, 50);
BEGIN
DBMS_OUTPUT.PUT_LINE('Jumlah elemen: ' || numbers.COUNT);
DBMS_OUTPUT.PUT_LINE('Elemen pertama: ' || numbers(numbers.FIRST));
DBMS_OUTPUT.PUT_LINE('Elemen terakhir: ' || numbers(numbers.LAST));
numbers.DELETE(3); -- Hapus elemen ketiga
IF NOT numbers.EXISTS(3) THEN
DBMS_OUTPUT.PUT_LINE('Elemen 3 tidak lagi ada!');
END IF;
END;
Kode ini menunjukkan penghitungan elemen, mengakses elemen pertama dan terakhir, menghapus elemen, dan memeriksa apakah elemen ada.
H2: Ekscepsi Koleksi
Bahkan rencana yang terbaik dapat berubah, dan hal yang sama benar untuk koleksi. PL/SQL menyediakan ekscepsi khusus untuk membantu kita mengelola kesalahan koleksi dengan mulus.
H3: Ekscepsi Koleksi Umum
Ekscepsi | Deskripsi |
---|---|
COLLECTION_IS_NULL | Diteteksi saat mencoba operasi pada koleksi null |
NO_DATA_FOUND | Diteteksi saat mengakses elemen yang tidak ada |
SUBSCRIPT_BEYOND_COUNT | Diteteksi saat mengakses elemen di luar ukuran saat ini |
SUBSCRIPT_OUTSIDE_LIMIT | Diteteksi saat menggunakan indeks di luar batas yang diizinkan |
Mari kita lihat bagaimana kita dapat menangani ekscepsi ini:
DECLARE
TYPE number_list_type IS TABLE OF NUMBER;
numbers number_list_type;
BEGIN
-- Ini akan menimbulkan COLLECTION_IS_NULL
numbers(1) := 10;
EXCEPTION
WHEN COLLECTION_IS_NULL THEN
DBMS_OUTPUT.PUT_LINE('Ups! Koleksi null. Mari kita inisialisasikan.');
numbers := number_list_type(10, 20, 30);
DBMS_OUTPUT.PUT_LINE('Sekarang kita memiliki ' || numbers.COUNT || ' elemen.');
END;
Kode ini mencoba menambahkan elemen ke koleksi null, menangkap ekscepsi, dan kemudian menginisialisasi koleksi dengan benar.
Dalam kesimpulan, Koleksi PL/SQL adalah alat kuat yang memungkinkan kita untuk mengelola kelompok data secara efisien. Apakah Anda sedang merencanakan pesta atau mengelola operasi database yang kompleks, menguasai koleksi akan membuat perjalanan PL/SQL Anda menjadi lebih mulus.
Ingat, latihan membuat sempurna! Cobalah membuat koleksi Anda sendiri, eksperimen dengan metode yang berbeda, dan jangan takut terhadap ekscepsi - mereka ada untuk membantu Anda belajar dan menulis kode yang lebih kuat.
Semoga sukses, para ahli PL/SQL masa depan!
Credits: Image by storyset