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!

PL/SQL - Collections

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