• Tidak ada hasil yang ditemukan

PERINTAH KONDISIONAL

Dalam dokumen BAB I PEMODELAN SISTEM (Halaman 143-151)

MODUL VI CONTOH KASUS

PERINTAH KONDISIONAL

PERINTAH KONDISIONAL

PL/SQL mempunyai perintah kondisional IF-THEN-ELSE. Sintaksnya adalah sebagai berikut :

IF ekspresi_boolean1 THEN

urutan_perintah1; [ELSIF ekspresi_boolean2 THEN urutan_perintah2;]

[ELSE

urutan_perintah3;

END IF];

Lebih jelas mengenai pemakaian If adalah sebagai berikut :

DECLARE a NUMBER; b NUMBER; BEGIN

SELECT e,f INTO a,b FROM T1 WHERE e>1; IF b=1 THEN

INSERT INTO T1 VALUES(b,a); ELSE

INSERT INTO T1 VALUES(b+10,a+10); END IF;

END; /

LOOP

PL/SQL mendukung pengeksekusian pertah berulang menggunakan loop. Jenis loop yang terdapat dalam PL/SQL adalah :

1. Simple Loops

Sintaks simple loop adalah :

LOOP

16 Berikut ini contoh penggunaan LOOP :

DECLARE i NUMBER := 1; BEGIN

LOOP

INSERT INTO T1 VALUES(i,i); i := i+1;

EXIT WHEN i>100; END LOOP;

END; /

2. While Loops

Sintaks dari While Loop adalah :

WHILE kondisi LOOP urutan_perintah END LOOP;

Jika kondisi bernilai TRUE, urutan_perintah akan terus dieksekusi. Dalam loop ini perintah EXIT dapat digunakan jika dibutuhkan. Berikut ini contoh penggunaan while loop.

DECLARE i NUMBER := 1; vhitung number; BEGIN WHILE i <= 20 LOOP vhitung := i ** 2;

INSERT INTO T1 VALUES(i, vhitung); vhitung := 0;

i := i+1; END LOOP; END;

/

3. Numeric FOR Loops

17

vhit number; BEGIN

FOR vhitung IN 1..20 LOOP vhit := vhitung ** 3;

Insert into t1 values (vhitung, vhit); END LOOP;

END; /

Menangani ERROR

Penanganan error dalam PL/SQL lebih mudah dengan adanya bagian EXCEPTION dalam blok PL/SQL. Tidak seperti pemrograman dalam bahasa pemrograman lain seperti C yang harus menangkap error dengan mempergunakan perintah if. EXCEPTION dibagi dalam dua jenis yaitu :

1. Predefined Exception

Merupakan kondisi exception yang telah didefinisikan dalam oracle, diantaranya adalah : NO_DATA_FOUND, DUP_VAL_ON_INDEX, TOO_MANY_ROWS, INVALID_NUMBER, ZERO_DEVIDE dan PROGRAM_ERROR. Berikut ini contoh predefined exception.

set serveroutput on size 20000 DECLARE

vnim varchar2(5) := 12345; vnama mahasiswa.nama%type; vkomen char(25);

BEGIN

select nama into vnama from mahasiswa where nim=vnim; exception

when no_data_found then vkomen := 'Data tidak ada'; dbms_output.put_line(vkomen); END;

18 ditangkap dengan mempergunakan perintah if dan menyerahkannya ke variabel exception dengan perintah RAISE. Berikut ini contoh user-defined exception.

set serveroutput on size 20000 DECLARE vnama matakuliah.nm_mtk%type; vsks matakuliah.sks%type; e_jml_sks exception; vkomentar char(25); BEGIN

select nm_mtk, sks into vnama, vsks from matakuliah where kdmtk = 'mt01';

if vsks < 4 then RAISE e_jml_sks; end if;

EXCEPTION

when e_jml_sks then

vkomentar := 'Bobot SKS dibawah 4'; dbms_output.put_line(vkomentar); end;

/

19 PL/SQL ini memiliki nama. Seperti layaknya Procedure dan Function pada bahasa pemrograman yang sudah dipelajari (Visual basic, Delphi, Bahasa C dan lainnya).

Procedure

Procedure merupakan blok yang memiliki nama. Pemanggilan procedure dilakukan melalui blok PL/SQL lain. Penggunaan procedure merupakan fasilitas yang paling sering digunakan dalam membuat kontrol program di database Oracle. Procedure memiliki struktur yang mudah dipahami, terletak dalam database, dan mudah dipanggil untuk dieksekusi. Seperti dalam PL/SQL yang telah dipelajari pada nagian lalu, hanya saja untuk bagian DECLARE diganti dengan CREATE PROCEDURE. Cobalah prosedur berikut ini.

CREATE OR REPLACE PROCEDURE Tambah_Mahasiswa( vnim mahasiswa.nim%type,

vnama mahasiswa.nama%type, valamat mahasiswa.alamat%type) as BEGIN

INSERT INTO mahasiswa (nim, nama, alamat) VALUES(vnim, vnama,valamat);

END Tambah_Mahasiswa; /

Procedure diatas berfungsi untuk menambah data pada tabel mahasiswa. Nama prosedur adalah Tambah_Mahasiswa. Untuk penambahan data dapat dilakukan dengan mempergunakan pemanggilan procedure diikuti parameter. Sehingga tidak mempergunakan perintah Insert into …. Penambahan data dengan mempergunakan procedure tersebut dapat dilakukan dengan perintah berikut :

BEGIN

Tambah_Mahasiswa('11','Banu','Sleman'); END;

20 satu variabel yang dimasukkan diproses terlebih dahulu (variabel b).

CREATE OR REPLACE PROCEDURE AddT1 (a NUMBER, b OUT NUMBER) AS

BEGIN b := a * 4;

INSERT INTO T1 VALUES(a, b); END;

/

Jalankan script tersebut (procedure AddT1) dan cek dengan script berikut :

DECLARE v number; BEGIN addt1(10,v); END; /

Script diatas menambahkan data kedalam tabel T1 dengan nilai field pertama 10 dan nilai field kedua (v) dari hasil perhitungan dalam procedure.

FUNCTION

Function merupakan PL/SQL blok yang mirip dengan procedure. Perbedaannya adalah function mengembalikan suatu nilai dan dipanggil melalui suatu ekspresi. Untuk membuat function, diawali dengan CREATE OR REPLACE FUNCTION. Sama seperti membuat procedure, kalimat OR REPLACE digunakan untuk menimpa function yang sudah ada jika namanya sama. Berikut ini contoh function.

CREATE OR REPLACE FUNCTION HitSks(vnim krs.nim%type) RETURN matakuliah.sks%type is

vsks matakuliah.sks%type; Begin

select count(sks) into vsks from krs, matakuliah

21 dipergunakan dengan pemanggilan fungsi dengan perintah berikut ini pada prompt SQL *PLUS :

SQL> select nama, hitsks(nim) from mahasiswa where hitsks(nim)>2;

Pemanggilan fungsi dapat dilakukan di dalam suatu blok procedure. Semua nilai yang dikembalikan oleh function tersebut dapat dipergunakan untuk input suatu proses dalam suatu ekspresi didalam procedure. Justru kenyataanya, function banyak dipergunakan didalam blok procedure.

TRIGGER

Trigger merupakan PL/SQL blok yang mirip dengan procedure. Jika procedure dijalankan secara eksplisit lewat pemanggilan procedure, trigger dijalankan secara implisit lewat ‘pemicu’. Pemicu yang dimaksud adalah Data Manipulation Language (DML) yang terdiri atas perintah INSERT, UPDATE atau DELETE dari suatu tabel database. Trigger bermanfaat untuk :

• Mengatur integrity constraint yang kompleks yang tidak mungkin ditangani oleh sintaks-sintaks pembuatan tabel.

• Audit database dengan cara memasukkan informasi perubahan dan siapa yang mengubah saat ada user yang mengubah data.

• Secara otomatis memberi sinyal program lain untuk melakukan sesuatu jika isi tabel diubah.

Trigger dapat didefinisikan untuk operasi INSERT, UPDATE dan DELETE. Trigger ini dapat dipicu sebelum (BEFORE) atau sesudah (AFTER) operasi berjalan. Trigger juga berlaku untuk tingkat baris (FOR EACH ROW) yang berlaku untuk setiap baris tabel saat dimanipulasi, atau tingkat seluruh tabel yang dijalankan untuk seluruh tabel saat trigger itu dijalankan.

22

BEGIN insert into tlog

values (user, to_char(sysdate, 'Month DY, DD, HH24:MI'),'Tabel telah diubah'); END;

/

Trigger tersebut bernama TRIGUBAH, yang berguna untuk melakukan dokumentasi jika tabel mahasiswa diubah. Identitas perubah disimpan dalam field user, tanggal perubahan dan komentar. Ubah script trigger diatas menjadi script trigger berikut ini :

CREATE OR REPLACE TRIGGER TRIGUBAH

BEFORE DELETE OR INSERT OR UPDATE ON MAHASISWA BEGIN

If deleting then insert into tlog

values (user, to_char(sysdate, 'Month DY, DD, HH24:MI'),'Data pada tabel dihapus');

elsif inserting then insert into tlog

values (user, to_char(sysdate, 'Month DY, DD, HH24:MI'),'Data pada tabel ditambah');

elsif updating then insert into tlog

values (user, to_char(sysdate, 'Month DY, DD, HH24:MI'),'Data pada tabel diubah');

end if; END; /

Jalankan script trigger tersebut dan cobalah untuk menambah, mengupdate dan menghapus data pada tabel mahasiswa. Lihat isi tabel tlog. Tambahkan komentar anda pada laporan tugas mingguan.

SISTEM PENGOLAHAN DATA PASIEN RAWAT INAP

Dalam dokumen BAB I PEMODELAN SISTEM (Halaman 143-151)

Dokumen terkait