PL/SQL - Koleksi: Pintu Anda ke Penanganan Data Efisien

Hai teman-teman, para pengembang PL/SQL yang berbakat! Saya sangat senang untuk mengantar Anda melalui 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 detilnya, mari kita pahami apa itu koleksi. Bayangkan Anda mengatur pesta ulang tahun, dan Anda perlu mencatat semua tamu Anda. Apakah lebih mudah mencatat setiap nama di lembaran kertas terpisah, atau mencatatnya dalam satu daftar saja? Itu exactly apa yang koleksi lakukan di PL/SQL - mereka memungkinkan kita untuk mengelompokkan data yang terkait bersama-sama.

Sekarang, mari kita jelajahi jenis koleksi yang ditawarkan PL/SQL.

H2: Tabel Index-By (Array Asosiatif)

Tabel Index-By, juga dikenal sebagai Array Asosiatif, seperti buku alamat yang magical. Bukan hanya menyimpan nama, Anda dapat mengkaitkan 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 (index) terkait dengan apa yang mereka bawa ke pesta. Ketika kita menjalankan kode ini, itu akan mencetak: "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 mencatat semua tamu kita dan apa yang mereka bawa. Itu seperti mengikuti daftar cek pesta Anda!

H2: Tabel Bersarang

Tabel Bersarang seperti daftar yang dapat diperluas. Bayangkan Anda merencanakan beberapa pesta, dan setiap pesta memiliki daftar tamu yang dapat bertambah atau berkurang.

H3: Mendeklarasikan dan Menginisialisasi 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 yang keempat. Output akan menampilkan "Tamu pertama: Alice" dan "Tamu baru: David".

H2: Metode Koleksi

Koleksi datang dengan metode bawaan yang membuat hidup kita mudah. Pahami 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 keberadaan elemen.

H2: Ekscepsi Koleksi

Bahkan rencana yang terbaik dapat terganggu, dan hal yang sama berlaku untuk koleksi. PL/SQL menyediakan eksepsi khusus untuk membantu kita menangani kesalahan yang berkaitan dengan koleksi dengan mulus.

H3: Ekscepsi Koleksi Umum

Ekscepsi Deskripsi
COLLECTION_IS_NULL Terjadi saat mencoba operasi pada koleksi null
NO_DATA_FOUND Terjadi saat mengakses elemen yang tidak ada
SUBSCRIPT_BEYOND_COUNT Terjadi saat mengakses elemen di luar ukuran saat ini
SUBSCRIPT_OUTSIDE_LIMIT Terjadi saat menggunakan indeks di luar batas yang diizinkan

Mari kita lihat bagaimana kita dapat menangani eksepsi ini:

DECLARE
TYPE number_list_type IS TABLE OF NUMBER;
numbers number_list_type;
BEGIN
-- Ini akan mengangkat COLLECTION_IS_NULL
numbers(1) := 10;
EXCEPTION
WHEN COLLECTION_IS_NULL THEN
DBMS_OUTPUT.PUT_LINE('Ups! Koleksi adalah null. Mari kita inisialisasikan.');
numbers := number_list_type(10, 20, 30);
DBMS_OUTPUT.PUT_LINE('Sekarang kita punya ' || numbers.COUNT || ' elemen.');
END;

Kode ini mencoba menambahkan elemen ke koleksi null, menangkap eksepsi, dan kemudian menginisialisasi koleksi dengan benar.

Akhir kata, koleksi PL/SQL adalah alat yang kuat yang memungkinkan kita untuk mengelola kelompok data secara efisien. Apakah Anda merencanakan pesta atau mengelola operasi basis data 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 eksepsi - mereka ada untuk membantu Anda belajar dan menulis kode yang lebih kuat.

Selamat coding, para ahli PL/SQL masa depan!

Credits: Image by storyset