• Tidak ada hasil yang ditemukan

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.

Dalam dokumen DAFTAR ISI - System Manajemen Basis Data (Halaman 52-68)