PL/SQL - Ekscepsi: Panduan untuk Pemula

Hai teman-teman, para maestro PL/SQL masa depan! Hari ini, kita akan mandar ke dunia yang menarik dari ekscepsi dalam PL/SQL. Jangan khawatir jika Anda baru dalam programming - saya akan mengarahkan Anda langkah demi langkah melalui topik ini, sama seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, ambil secangkir kopi (atau teh, jika itu hal Anda), dan mari kita mulai perjalanan menarik ini bersama!

PL/SQL - Exceptions

Apa Itu Ekscepsi?

Sebelum kita masuk ke hal-hal teknis, mari pahami apa itu ekscepsi. Bayangkan Anda sedang memasak kue (ikuti saya disini, saya berjanji ini berkaitan dengan programming). Anda mengikuti resep langkah demi langkah, tapi tiba-tiba, Anda menyadari Anda kehabisan telur! Situasi tak terduga ini mirip dengan ekscepsi dalam programming.

Dalam PL/SQL, ekscepsi adalah kejadian yang tak terduga yang mengganggu aliran normal program Anda. Mereka bisa menjadi kesalahan seperti mencoba membagi dengan nol atau mencoba memasukkan nilai duplikat ke kolom unik. Daripada membiarkan masalah ini crash program kita, kita dapat "menangani" mereka dengan mulus - sama seperti Anda mungkin menggunakan pengganti untuk telur dalam analogi memasak kita.

Sintaks untuk Penanganan Ekscepsi

Sekarang, mari kita lihat bagaimana kita sebenarnya menangani ekscepsi ini dalam PL/SQL. Struktur dasar terlihat seperti ini:

BEGIN
-- Kode Anda biasa disini
EXCEPTION
WHEN exception_name1 THEN
-- Tangani ekscepsi 1
WHEN exception_name2 THEN
-- Tangani ekscepsi 2
WHEN OTHERS THEN
-- Tangani semua ekscepsi lainnya
END;

mari kitauraikan ini:

  1. Kita menulis kode biasa kita dalam blok BEGIN.
  2. Jika terjadi ekscepsi, program melompat ke blok EXCEPTION.
  3. Kita dapat menangani ekscepsi spesifik menggunakan klausa WHEN.
  4. Klausa WHEN OTHERS menangkap semua ekscepsi yang kita belum tangani secara spesifik.

Berikut adalah contoh sederhana:

DECLARE
v_result NUMBER;
BEGIN
v_result := 10 / 0;  -- Ini akan menyebabkan kesalahan pembagian nol
DBMS_OUTPUT.PUT_LINE('Hasil: ' || v_result);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Kesalahan: Tidak dapat membagi dengan nol!');
END;

Dalam contoh ini, kita mencoba membagi 10 dengan 0, yang matematiknya mustahil. Daripada crash, program kita menangkap ekscepsi ZERO_DIVIDE dan mencetak pesan kesalahan yang ramah.

Menaikkan Ekscepsi

kadang-kadang, kita ingin membuat ekscepsi sendiri saat kondisi tertentu terpenuhi. Kita dapat melakukan ini menggunakan pernyataan RAISE. Itu seperti menjadi wasit di pertandingan sepak bola - Anda melihat pelanggaran, Anda membluskan semprit!

Berikut cara kerjanya:

DECLARE
v_age NUMBER := 15;
BEGIN
IF v_age < 18 THEN
RAISE_APPLICATION_ERROR(-20001, 'Harus berusia 18 atau lebih tua');
END IF;
DBMS_OUTPUT.PUT_LINE('Selamat datang ke klub!');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Kesalahan: ' || SQLERRM);
END;

Dalam contoh ini, kita memeriksa jika seseorang cukup tua untuk masuk ke klub. Jika mereka kurang dari 18 tahun, kita naikkan ekscepsi dengan pesan kesalahan khusus. Klausa WHEN OTHERS menangkap ekscepsi ini dan mencetak pesan kesalahan.

Ekscepsi yang Ditentukan Pengguna

Meskipun PL/SQL menyediakan banyak ekscepsi yang sudah ditentukan, kadang-kadang kita perlu membuat ekscepsi sendiri. Itu seperti menciptakan aturan baru dalam permainan kita. Berikut cara kita dapat melakukan ini:

DECLARE
e_invalid_name EXCEPTION;
v_name VARCHAR2(50) := 'J0hn';
BEGIN
IF NOT REGEXP_LIKE(v_name, '^[A-Za-z]+$') THEN
RAISE e_invalid_name;
END IF;
DBMS_OUTPUT.PUT_LINE('Nama valid: ' || v_name);
EXCEPTION
WHEN e_invalid_name THEN
DBMS_OUTPUT.PUT_LINE('Kesalahan: Nama hanya boleh mengandung huruf');
END;

Dalam contoh ini, kita menciptakan ekscepsi khusus e_invalid_name. Kita naikkan ini jika nama mengandung sesuatu selain huruf. Hal ini memungkinkan kita menangani scenario khusus ini dalam cara yang membuat sense bagi program kita.

Ekscepsi yang Sudah Ditentukan

PL/SQL datang dengan set ekscepsi yang sudah ditentukan untuk kesalahan scenario umum. Itu seperti memiliki koper pertolongan siaga untuk cedera umum. Berikut adalah beberapa yang paling sering digunakan:

Nama Ekscepsi Deskripsi
NO_DATA_FOUND Terjadi saat pernyataan SELECT INTO tidak mengembalikan baris
TOO_MANY_ROWS Terjadi saat pernyataan SELECT INTO mengembalikan lebih dari satu baris
ZERO_DIVIDE Terjadi saat mencoba membagi dengan nol
DUP_VAL_ON_INDEX Terjadi saat mencoba memasukkan nilai duplikat ke indeks unik
VALUE_ERROR Terjadi saat ada kesalahan aritmetik, konversi, pemotongan, atau batas ukuran

Lihat contoh menggunakan ekscepsi yang sudah ditentukan:

DECLARE
v_emp_name VARCHAR2(50);
BEGIN
SELECT first_name INTO v_emp_name
FROM employees
WHERE employee_id = 1000;  -- Asumsi ID ini tidak ada

DBMS_OUTPUT.PUT_LINE('Nama karyawan: ' || v_emp_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Kesalahan: Tidak ada karyawan dengan ID itu');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Kesalahan: Ditemukan lebih dari satu karyawan');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Terjadi kesalahan yang tak terduga: ' || SQLERRM);
END;

Dalam contoh ini, kita mencoba mengambil nama karyawan. Jika tidak ada karyawan ditemukan, kita tangkap ekscepsi NO_DATA_FOUND. Jika ternyata ada lebih dari satu karyawan ditemukan, kita tangkap ekscepsi TOO_MANY_ROWS. Setiap kesalahan tak terduga lainnya ditangkap oleh klausa WHEN OTHERS.

Dan begitu juga, teman-teman! Kita telah melihat dasar-dasar penanganan ekscepsi dalam PL/SQL. Ingat, menangani ekscepsi adalah seperti memakai sabuk keselamatan - mungkin tampak tak diperlukan saat segalanya berjalan lancar, tetapi bisa menyelamatkan Anda saat hal-hal berubah buruk.

Praktik konsep ini, mainkan dengan berbagai scenario, dan segera Anda akan menjadi ahli dalam menangani ekscepsi. Selamat coding, dan semoga program Anda selalu menangani yang tak terduga dengan mulus!

Credits: Image by storyset