Catatan PL/SQL Oracle (2)

Berikut adalah lanjutan dari Catatan PL/SQL Oracle sebelumnya. Semoga bermanfaat.

Pengambilan suatu nilai dari hasil Query

Berikut adalah sintaks PL/SQL untuk mengambil hasil dari suatu Query. Kemudian hasil tersebut disimpan dalam suatu variable. Variable yang menyimpan hasil Query itu dapat digunakan untuk perintah selanjutnya. Dalam contoh ini, variable tersebut hanya dikeluarkan nilainya saja.

DECLARE
PHarga NUMBER(5);
PNama VARCHAR2(15);
BEGIN
PHarga:= 500;
SELECT nama INTO PNama FROM Barang WHERE Harga = PHarga;
DBMS_OUTPUT.PUT_LINE('Nama Barang = '||PNama||', Harga = '||PHarga);
END;

Pengkondisian IF-THEN-ELSE

Secara sederhana, struktur dasar dari pengkondisian IF-THEN dalam PL/SQL adalah sebagai berikut.

IF (kondisi) THEN (aksi jika kondisi terpenuhi)
END IF;

Berikut adalah sintaks untuk pengkondisian IF-THEN sederhana.

DECLARE
PHarga NUMBER(5);
BEGIN
PHarga := 500;
IF (PHarga > 100) THEN
--Jika syarat terpenuhi, lakukan aksi dibawah ini.
DBMS_OUTPUT.PUT_LINE('PHarga diatas 100');
END IF; --akhir dari pengkondisian.
END;

Berikut adalah contoh penggunaan IF-THEN-ELSE :


DECLARE
 PId VARCHAR2(3);
 PHarga NUMBER(5);
BEGIN
 PId := 'B03';
 SELECT harga INTO PHarga FROM Barang WHERE IDB = PId;
--mengambil nilai harga pada table barang lalu dimasukkan ke dalam PHarga.
 IF (PHarga > 3000) THEN
 DBMS_OUTPUT.PUT_LINE('Mahal!');
 ELSE
 DBMS_OUTPUT.PUT_LINE('Murah!');
 END IF;
END;

Nah, jika ingin menggunakan lebih dari satu pengkondisian sekaligus, berikut contohnya :


DECLARE
 PId VARCHAR2(3);
 PHarga NUMBER(5);
BEGIN
 PId := 'B02';
 SELECT harga INTO PHarga FROM Barang WHERE IDB = PId;
 IF PHarga > 3500 THEN
 DBMS_OUTPUT.PUT_LINE('Mahal!');
 ELSIF PHarga < 3500 THEN
 DBMS_OUTPUT.PUT_LINE('Murah!');
 ELSIF PHarga = 3500 THEN
 DBMS_OUTPUT.PUT_LINE('Harga pas!');
 END IF;
END;

Pengkondisian CASE-WHEN

Struktur dasar dari pengkondisian ini adalah :


CASE (variable yang menjadi referensi pengkondisian)
WHEN (suatu nilai) THEN (aksi);
 WHEN (suatu nilai 2) THEN (aksi2);
END CASE;

Berikut adalah contoh penggunaan CASE-WHEN :


DECLARE
 grade VARCHAR2(1);
BEGIN
 grade := 'A';
 CASE (grade)
 WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('Luar biasa');
 WHEN 'B' THEN  DBMS_OUTPUT.PUT_LINE('Sangat bagus');
 WHEN 'C' THEN  DBMS_OUTPUT.PUT_LINE('Rata-rata');
 WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE('Kurang');
 WHEN 'E' THEN DBMS_OUTPUT.PUT_LINE('Sangat kurang');
 END CASE;
END;

Perulangan WHILE

Struktur dasar sintaks PL/SQL untuk perulangan dengan menggunakan While adalah :


WHILE(pengkondisian)
LOOP
--aksi yang dilakukan jika kondisi terpenuhi.
END LOOP;

Berikut adalah sintaks PL/SQL perulangan menggunaan WHILE :


DECLARE
 i NUMBER := 1;
BEGIN
 WHILE (i <= 10)
 LOOP
 DBMS_OUTPUT.PUT_LINE('Baris ke : '||i);
 i := i+1; --tanpa penambahan nilai i ini, perulangan tidak akan berhenti.
 END LOOP;
END;

4 thoughts on “Catatan PL/SQL Oracle (2)

  1. anyone please help

    aku mencoba menarik data dengan query berikut :

    select no_rekening, cabang, status, Status_rek
    from branch

    hasilnya sebagai berikut :

    no_rekening cabang status Status_rek
    1160100148452 CBG_JAKSEL S new
    1120100013874 CBG_JAKSEL TS topup
    1480100413205 CBG_JAKTIM S topup
    1540100239791 CBG_JAKUT TS new

    saya ingin membuat field baru dengan kondisi sebagai berikut :

    no_rekening cabang status Status_rek status_ok
    1160100148452 CBG_JAKSEL S new S
    1120100013874 CBG_JAKSEL TS topup S
    1480100413205 CBG_JAKTIM S topup S
    1540100239791 CBG_JAKUT TS new TS

    saya menemukan kesulitan untuk tambahan query selectnya

    bisakah membantu saya

    • Field tambahan “status_ok” itu berdaarkan apa?
      Saya misalkan saja, status_ok itu berdasarkan field status_rek ya.
      Misalkan kondisinya :
      Jika status_rek = new, maka status_ok = S.
      Dan jika status_rek = old, maka status_ok = TS.
      Dan jika status_rek bukan new ataupun old, maka status_ok = ” (string kosong).

      Querynya adalah :
      select no_rekening, cabang, status, Status_rek, decode(Status_rek,’new’,’S’,’old’,’TS’,”) as status_ok
      from branch

      Semoga membantu.

Tinggalkan komentar