Wednesday, February 25, 2026

 Ini topik yang kelihatannya dasar,

tapi jujur… saya dulu sering kepleset di sini.

Kodenya jalan.
Tidak error.
Tapi hasilnya tidak sesuai harapan.


Contoh Kasus yang Sering Terjadi

DECLARE v_total NUMBER := 0; BEGIN FOR i IN 1..5 LOOP DECLARE v_total NUMBER := 10; BEGIN v_total := v_total + i; END; END LOOP; DBMS_OUTPUT.PUT_LINE(v_total); END;

Di kepala saya dulu:

“v_total akan bertambah terus.”

Hasilnya?
👉 tetap 0.


Kenapa Bisa Begitu?

Karena ada dua v_total berbeda:

  • Satu di blok luar

  • Satu lagi di blok dalam

Variabel di blok dalam:

  • Menimpa nama

  • Tapi tidak mengubah variabel luar

Ini bukan bug.
Ini cara kerja scope.


Kesalahan yang Dulu Sering Saya Lakukan

Saya sering:

  • Pakai nama variabel yang sama

  • Bikin blok DECLARE kecil tanpa sadar

  • Lalu bingung kenapa nilainya “nggak nyampe keluar”

Dan ini sering kejadian di:

  • Loop

  • Exception

  • Sub-block kecil


Versi yang Lebih Aman

Biasanya saya sekarang:

  • Deklarasi variabel di level atas

  • Hindari DECLARE tambahan kecuali perlu

DECLARE v_total NUMBER := 0; BEGIN FOR i IN 1..5 LOOP v_total := v_total + i; END LOOP; DBMS_OUTPUT.PUT_LINE(v_total); END;

Lebih jelas.
Lebih minim kejutan.


Catatan Pengalaman Kerja

Di satu debugging, saya pernah:

  • Fokus ke query

  • Fokus ke logic

  • Padahal masalahnya cuma scope variabel

Begitu sadar:

“Oh… ini variabel yang beda.”

Debug selesai dalam 2 menit.


Prinsip Sederhana yang Saya Pakai Sekarang

Kalau hasil aneh tapi:

  • Tidak ada error

  • Logic kelihatannya benar

Saya langsung cek:

  1. Scope variabel

  2. Apakah ada blok DECLARE tersembunyi

  3. Nama variabel yang sama

Sering kali jawabannya ada di situ.


Penutup

PL/SQL itu bahasa yang rapi,
tapi tetap punya jebakan kecil.

Variable scope mungkin kelihatan sepele,
tapi bisa bikin logika melenceng jauh.

Sampai catatan Rabu berikutnya 👋

0 comments:

Post a Comment

Popular Posts