Wednesday, January 7, 2026

Kalau dipikir-pikir, error PL/SQL itu jarang yang benar-benar “aneh”.

Yang bikin lama biasanya justru hal kecil yang terlewat.

Dan ini biasanya kejadian kalau:

  • Sudah lama nggak pegang PL/SQL

  • Atau lagi buru-buru

  • Atau merasa “ini pasti gampang”

(Spoiler: justru di situ jebakannya 😅)


1️⃣ ORA-06502: Numeric or Value Error

Ini salah satu error yang paling sering saya temui… dan paling bikin mikir.

Contoh sederhana:

DECLARE v_name VARCHAR2(5); BEGIN v_name := 'ANDI SETIAWAN'; END;

Sekilas aman.
Tapi begitu dijalankan… boom 💥

Kenapanya simpel:

  • Panjang string lebih besar dari ukuran variabel

  • Tapi saat fokus ke logika, hal kecil ini sering luput

Pelajaran:
Kalau error ini muncul, cek ukuran variabel dulu, jangan langsung nuduh query.


2️⃣ SELECT INTO yang Ternyata Balik Lebih dari Satu Baris

Ini klasik.

DECLARE v_salary NUMBER; BEGIN SELECT salary INTO v_salary FROM employees WHERE department_id = 10; END;

Di kepala kita:

“Ah, cuma satu data kok.”

Di database:

“Ini ada 5 baris, bro.”

Akhirnya:

ORA-01422: exact fetch returns more than requested number of rows

Dan biasanya baru sadar setelah:

  • Cek data manual

  • Atau ditambah ROWNUM = 1 (yang kadang cuma jadi tambalan)


3️⃣ Lupa COMMIT, Padahal Procedure Jalan Normal

Ini bukan error, tapi jebakan mental.

Procedure jalan:

  • Tidak ada error

  • Output muncul

  • Tapi data… nggak berubah

Contoh:

BEGIN UPDATE employees SET salary = salary + 1000 WHERE employee_id = 101; END;

Dijalankan, sukses.
Tapi pas dicek ulang… datanya tetap sama.

Jawabannya sederhana:
👉 belum COMMIT

Lucunya, ini sering kejadian:

  • Di environment testing

  • Saat pindah dari aplikasi ke SQL Developer


4️⃣ Error karena NULL yang Tidak Disangka

PL/SQL dan NULL itu… hubungan cinta-benci.

IF v_total = 0 THEN DBMS_OUTPUT.PUT_LINE('Kosong'); END IF;

Kalau v_total ternyata NULL, kondisi ini tidak pernah true.

Padahal di kepala kita:

“Kalau kosong ya 0 dong.”

Nope.
PL/SQL beda cerita.

Solusi paling aman:

IF NVL(v_total, 0) = 0 THEN

Catatan Pengalaman

Di satu project lama, saya pernah:

  • Ngejar error berjam-jam

  • Fokus ke query yang panjang

  • Padahal penyebabnya cuma salah ukuran VARCHAR2

Sejak itu, setiap debug PL/SQL, saya selalu mulai dari:

  1. Ukuran variabel

  2. Jumlah data SELECT INTO

  3. NULL handling

  4. COMMIT / ROLLBACK

Baru ke logika rumit.


Penutup

PL/SQL itu jarang “jahat”.
Yang sering bikin lama justru asumsi kita sendiri.

Catatan minggu ini cuma pengingat:

sebelum menyalahkan Oracle, cek dulu hal-hal kecil.

Catatan berikutnya kemungkinan bahas:

  • Procedure lambat padahal query cepat

  • Atau loop yang diam-diam bikin performa jatuh

Sampai catatan berikutnya 👋

0 comments:

Post a Comment

Popular Posts