4.2 Program Unit : Prosedur, Fungsi, Trigger
4.2.2 Fungsi
Fungsi adalah blok PL/SQL yang dapat mengembalikan nilai. Karena itu perlu ditambahkan statemen RETURN untuk proses pengembalian nilai.
CREATE [OR REPLACE] FUNCTION nama_fungsi
(parameter1 tipedata, parameter2 tipedata,...) RETURN tipe_data_fungsi IS variable_variabel_lokal tipedata; BEGIN statemen_statemen; ... RETURN nilai_fungsi; END;
Contoh
/*Fungsi pencarian nama supplier*/
CREATE OR REPLACE FUNCTION cari_supp (pi_kode VARCHAR2)
RETURN supplier.nama_supp%TYPE IS
v_NamaSupp supplier.nama_supp%TYPE;
BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO v_NamaSupp FROM supplier WHERE UPPER(kode_supp) = UPPER(pi_kode);
-- Mengembalikan nilai
RETURN v_NamaSupp; END;
4.2.3 Trigger
Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika melakukan statemen-statemen SQL (INSERT, DELELTE, atau UPDATE) terhadap sebuah tabel. Aktivasi trigger didasarkan pada event yang terjadi pada tabel tersebut.
CREATE [OR REPLACE] TRIGGER nama_trigger
BEFORE|AFTER [INSERT|DELETE|UPDATE] ON nama_tabel FOR EACH ROW
DECLARE
-- berisi deklarasi variabel
BEGIN
-- berisi statemen-statemen yang akan dieksekusi
Kemungkinan event yang dapat mengaktivasi sebuah trigger adalah :
Nama Event Deskripsi
BEFORE INSERT Diaktifkan sekali sebelum statemen INSERT AFTER INSERT Diaktifkan sekali setelah statemen INSERT BEFORE UPDATE Diaktifkan sekali sebelum statemen UPDATE AFTER UPDATE Diaktifkan sekali setelah statemen UPDATE BEFORE DELETE Diaktifkan sekali sebelum statemen DELETE AFTER DELETE Diaktifkan sekali setelah statemen DELETE
Contoh
/*Trigger yang diaktivasi setelah UPDATE*/
CREATE OR REPLACE TRIGGER trg_upd_barang AFTER UPDATE ON barang
FOR EACH ROW BEGIN
-- Mencetak keterangan ke layar tiap kali terjadi -- update terhadap tabel barang
DBMS_OUTPUT.PUT_LINE(‘Tabel barang telah
diupdate’);
END;
4.3 Naming Convention yang Baik
Naming convention yang tepat akan membuat kode statemen PL/SQL lebih mudah dibaca dan lebih bisa dimengerti. Secara singkat, keuntungan dari naming convention yang baik adalah :
o Lebih mudah dibaca.
o Lebih mudah dipahami.
o Memberikan informasi mengenai fungsionalitas berdasarkan identifier.
o Kemudahan dalam proses debug.
Beberapa contoh naming convention berdasar identifier :
Identifier Convention Contoh
Variabel v_prefix v_product_name
Konstanta c_prefix c_tax
Parameter p_prefix p_cust_id
Exception e_prefix e_chk_credit_limit
Cursor cur_prefix cur_orders
Type typ_prefix typ_customer
Rangkuman
1. Konsep prosedural dalam PL/SQL (Procedural Language extensions to SQL) merupakan sebuah teknologi yang memungkinkan kita membuat blok program layaknya dalam bahasa pemrograman prosedural.
Aplikasi IF … THEN SQL; ELSE SQL; END IF;
2. RPC (Remote Procedure Call) : pemanggilan progam unit (prosedur maupun fungsi) terhadap database.
Aplikasi RPC
3. Program unit merupakan kontainer sekumpulan kode atau statemen : Prosedur : blok PL/SQL yang menyimpan sekumpulan perintah tanpa
disertai pengembalian nilai.
CREATE [OR REPLACE] PROCEDURE nama_prosedur
(parameter1 tipedata, parameter2 tipedata,...) IS variable_variabel_lokal tipedata; BEGIN statemen_statemen; ... END;
Fungsi : blok PL/SQL yang dapat mengembalikan nilai.
CREATE [OR REPLACE] FUNCTION nama_fungsi
(parameter1 tipedata, parameter2 tipedata,...) RETURN tipe_data_fungsi IS variable_variabel_lokal tipedata; BEGIN statemen_statemen; ... RETURN nilai_fungsi; END;
Trigger : blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika melakukan statemen-statemen SQL terhadap sebuah tabel.
CREATE [OR REPLACE] TRIGGER nama_trigger
BEFORE|AFTER [INSERT|DELETE|UPDATE] ON nama_tabel FOR EACH ROW
DECLARE
-- berisi deklarasi variabel
BEGIN
-- berisi statemen-statemen yang akan dieksekusi
END;
4. Keuntungan dari naming convention yang baik adalah : Lebih mudah dibaca.
Lebih mudah dipahami.
Memberikan informasi mengenai fungsionalitas berdasarkan identifier.
Kemudahan dalam proses debug.
Memastikan konsistensi di antara banyak kode yang dibuat oleh developer yang berbeda.
Kuis Benar Salah
1. RPC (Remote Procedure Call) adalah proses pemanggilan stored procedure atau function pada database oleh aplikasi client.
2. Blok PL/SQL berikut : BEGIN
END;
Akan menghasilkan error.
3. Perbedaan antara prosedur dan fungsi adalah pada proses pengembalian nilai pada saat pemanggilan.
4. Trigger akan diaktivasi untuk setiap proses INSERT, DELETE, maupun UPDATE terhadap table apabila pada trigger tersebut tidak dispesifikasikan event apa yang bisa mengaktivasinya.
(Tanpa memperhatikan naming convention, untuk soal nomor 5 – 6 perhatikan prosedur berikut) CREATE OR REPLACE PROCEDURE prc_upd_bil IS
bil INTEGER := 3; BEGIN
bil := 5;
DBMS_OUTPUT.PUT_LINE(‘Nilai bil = ’ ||bil); END IF;
END;
6. execute prc_upd_bil;
Akan menghasilkan output :
Nilai bil = 5
(Tanpa memperhatikan naming convention, untuk soal nomor 7 – 9 perhatikan fungsi berikut)
CREATE OR REPLACE FUNCTION put_nama (pi_nama VARCHAR2) RETURN VARCHAR2 IS nama VARCHAR2(10); BEGIN RETURN nama; END;
7. SET serveroutput ON; DECLARE coba VARCHAR2(10); BEGIN coba := put_nama('12345'); DBMS_OUTPUT.PUT_LINE(coba); END;
Akan menghasilkan output :
12345
8. SET serveroutput ON; DECLARE coba VARCHAR2(10); BEGIN coba := put_nama(12345); DBMS_OUTPUT.PUT_LINE(coba); END;
9. SET serveroutput ON; DECLARE coba VARCHAR2(10); BEGIN coba := put_nama(‘123412341234’); DBMS_OUTPUT.PUT_LINE(coba); END;
Akan menghasilkan output :
123412341234
10. Prefix pada naming convention sebuah identifier dapat memberikan informasi mengenai fungsionalitas identifier tersebut.
Pilihan Ganda
1. Pengeksekusian statemen SQL dalam database dapat dilakukan dengan cara :
A. Sintaks SQL D. B dan C benar B. Blok PL/SQL E. A, B, dan C benar C. RPC
2. Berikut adalah beberapa jenis program unit, kecuali : A. prosedur D. trigger B. fungsi E. package C. table
3. Blok PL/SQL yang membutuhkan event untuk mengaktivasinya disebut :
A. prosedur D. trigger B. fungsi E. package C. table
4. Blok PL/SQL yang membutuhkan statement RETURN adalah : A. prosedur D. trigger
B. fungsi E. package C. table
5. Keuntungan dari pengaturan naming convention adalah sebagai berikut, kecuali :
A. Executable D. Informative B. Readable E. Consistency C. Understandable
(Tanpa memperhatikan naming convention, untuk soal nomor 6 – 8 perhatikan blok PL/SQL berikut)
SET serveroutput ON; DECLARE coba INTEGER; BEGIN coba := 5**3; DBMS_OUTPUT.PUT_LINE(coba); END;
6 Output dari blok PL/SQL di atas adalah :
A. 555 D. 15
B. 125 E. Error
C. 0
7 Bila baris statemen :
coba INTEGER;
Diganti menjadi :
coba DECIMAL (3,2);
Maka outputnya menjadi :
A 555 D. 15
B 125 E. Error
C 0
8 Pada baris statemen :
coba INTEGER;
coba merupakan sebuah :
A Variabel D Cursor
B Konstanta E Type
(Untuk soal nomor 9 - 10 perhatikan trigger berikut)
CREATE OR REPLACE TRIGGER trg_coba BEFORE UPDATE ON barang
FOR EACH ROW BEGIN
UPDATE barang SET jumlah = 10; END;
9 Bila dilakukan eksekusi :
UPDATE barang SET jumlah = 20;
Maka setelah eksekusi statemen di atas, field jumlah akan bernilai :
A 10 D 40
B 20 E 50
C 30
10 Bila statemen eksekusi ditambah menjadi :
UPDATE barang SET jumlah = 20
WHERE nama_brg = ‘Lemari Es’;
Maka setelah eksekusi statemen di atas, field jumlah akan bernilai : A 10, untuk semua jenis barang D 20, untuk jenis barang Lemari Es B 20, untuk semua jenis barang E 30, untuk jenis barang Lemari Es C 30, untuk semua jenis barang
Latihan
6. Sebutkan perbedaan antara prosedur, fungsi, dan trigger. Dan tuliskan sintaks masing-masing.
7. Sebutkan 5 keuntungan dari naming convention yang baik.
(Untuk soal nomor 3 - 4 perhatikan prosedur berikut)
CREATE OR REPLACE PROCEDURE prc_cetak_bil IS bil INTEGER := 5;
BEGIN
-- statemen cetak bilangan ganjil ...
-- statemen cetak bilangan genap ...
END;
8. Pada blok :
-- statemen cetak bilangan ganjil ...
tambahkan statemen SQL untuk mencetak bilangan ganjil antara 1
hingga 5. 9. Pada blok :
-- statemen cetak bilangan genap ...
tambahkan statemen SQL untuk mencetak bilangan genap antara 1
hingga 5.
CREATE OR REPLACE FUNCTION cek_prima (pi_bil INTEGER)
RETURN BOOLEAN IS
ket BOOLEAN;
BEGIN
-- statemen cek bilangan prima
...
-- akan mengembalikan TRUE bila merupakan -- bilangan prima, dan FALSE bila bukan
... END;
10. Pada statemen :
ket BOOLEAN;
Tambahkan inisialisasi nilai variabel dengan nilai awal adalah FALSE. 11. Pada blok :
-- statemen cek bilangan prima
...
tambahkan statemen SQL untuk meng-update nilai variabel ket menjadi TRUE bila bilangan yang dimasukkan adalah bilangan prima.
12. Mengembalikan nilai variabel ket sebagai nilai balikan fungsi cek_prima.
(Untuk soal nomor 8 - 10 perhatikan trigger berikut)
CREATE OR REPLACE TRIGGER trg_delete
-- deklarasi event terhadap table
...
FOR EACH ROW BEGIN
-- statemen yang diaktivasi saat event terjadi
...
13. Pada blok :
-- deklarasi event terhadap table
...
tambahkan deklarasi bahwa trigger akan teraktivasi setelah terjadi proses delete terhadap salah satu row di table barang.
14. Pada blok :
-- statemen yang diaktivasi saat event terjadi
...
tambahkan statemen DELETE untuk nama_brg yang mengandung kata ‗Lemari‘ (gunakan operator LIKE dan fungsi UPPER).
15. Pada blok :
-- menampilkan keterangan ke layar
...
tambahkan statemen untuk mencetak keterangan ke layar bahwa proses DELETE berhasil dilakukan.
5
Lebih Lanjut Mengenai Prosedural
-Percabangan-
Overview
Pada sebuah blok PL/SQL dapat ditempatkan suatu kontrol untuk pengecekan yang dilakukan sebelum statemen-statemen dalam blok PL/SQL dieksekusi. Kontrol inilah yang kemudian disebut sebagai percabangan (decision control / branching). Secara garis besar terdapat dua statemen percabangan : statemen IF dan statemen CASE.
Tujuan
1. Mahasiswa memahami konsep percabangan.