Modul 4 - Stored - Program
Modul 4 - Stored - Program
4
STORED PROGRAM
Tujuan :
1. Buku literatur mengenai PL/SQL ORACLE, terutama yang menggunakan DBMS ORACLE 10g.
2. Modul praktikum BASIS DATA LANJUT
3. Modul praktikum DATA MINING DAN WAREHOUSING
Landasan Teori :
1. Procedure
1.1 Non Nested Procedure
Non nested Procedure atau stored procedure merupakan sekumpulan blok PL/SQL yang
tersimpan di dalam skema database dan dapat dieksekusi secara berulang kali jika user
memiliki privilege untuk mengeksekusi procedure tersebut. Nama procedure yang dibuat
nantinya akan menjadi objek dengan tipe procedure. Procedure akan dieksekusi pada saat
pemanggilan setelah sebelumnya dibuat terlebih dahulu.
Sintaks Pendeklarasian:
CREATE [OR REPLACE] PROCEDURE nama_procedure [argumen1 tipe_data,
argumen2 tipe_data,...]
AS
[deklarasi variabel lokal]
BEGIN
badan_prosedur
EXCEPTION
END;
Keterangan :
nama_procedure : nama dari procedure yang akan dibuat
argumen : parameter-parameter yang dipakai saat pemanggilan procedure
badan_prosedur : tempat blok PL/SQL yang memuat baris kode.
Contoh :
CREATE OR REPLACE PROCEDURE tambahMahasiswa
(
v_nim mahasiswa.nim%TYPE;
v_nama mahasiswa.nama%TYPE;
v_alamat departemen.lokasi%TYPE;
)
IS
BEGIN
INSERT INTO mahasiswa VALUES(v_nim,v_nama,v_alamat);
END;
Contoh :
EXECUTE
tambahMahasiswa (‘30108002’,‘paimen’,‘sukapura’);
Untuk menghapus procedure yang telah kita buat, dapat menggunakan sintaks berikut
DROP PROCEDURE nama_procedure;
Contoh :
DROP PROCEDURE tambahMahasiswa;
Contoh :
DECLARE
PROCEDURE CETAK(kata varchar2, n number)
IS BEGIN FOR i IN 1..n LOOP
DBMS_OUTPUT.PUT_LINE(to_char(i)|| ’. ‘||kata);
END LOOP;
END CETAK;
BEGIN
CETAK(’&v_kata’, &v_n);
END;
Contoh:
CREATE OR REPLACE PROCEDURE lihat_mahasiswa
IS
vnama mahasiswa.nama%TYPE;
BEGIN
SELECT nama INTO vnama FROM mahasiswa WHERE nim='30108002';
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim 30108002
adalah '||vnama);
END;
/
Hasil setelah dieksekusi adalah sbb,
SQL> EXECUTE lihat_mahasiswa;
Contoh:
CREATE OR REPLACE PROCEDURE lihat_mahasiswa
(vnim IN mahasiswa.nim%TYPE)
IS
vnama mahasiswa.nama%type;
BEGIN
SELECT nama INTO vnama FROM mahasiswa WHERE nim = vnim;
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim '||vnim||'
adalah '||vnama);
END;
/
Contoh:
Procedure yang menggunakan parameter masukan dan juga parameter keluaran
adalah sebagai berikut :
CREATE OR REPLACE PROCEDURE lihat_mahasiswa
(vnim IN mahasiswa.nim%TYPE,vnama OUT mahasiswa.nama%TYPE)
IS
BEGIN
SELECT nama INTO vnama FROM mahasiswa WHERE nim = vnim;
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim '||vnim||'
adalah '||vnama);
END;
/
c.Nama mahasiswa
Parameter teladan bulan
Masukan/Keluaran ini adalah paimen
(Input/Output)
Ditandai atribut IN OUT, dimana parameter tersebut dianggap sebagai masukan
kemudian diproses dan ditampilkan kembali sebagai keluaran.
Contoh:
CREATE OR REPLACE PROCEDURE kuadrat (x IN OUT number)
IS
BEGIN
x:=x*x;
END;
/
2. Function
Perbedaan mendasar antara function dan procedure adalah bahwa function harus
mengembalikan nilai tertentu kepada pemanggilnya Nilai ini dikembalikan dengan
menggunakan sintaks RETURN.
Sintaks:
CREATE [OR REPLACE] FUNCTION nama_function
[(argumen [IN|OUT|IN OUT] tipe_data,argumen [IN|OUT|IN OUT]tipe_data, ...)]
RETURN tipe_data {IS|AS}
[deklarasi variabel lokal]
BEGIN
badan fungsi
END;
RETURN adalah nilai yang dikembalikan oleh function. Jika terdapat RETURN dalam
badan fungsi, maka itu berfungsi untuk mengembalikan kontrol kepada pemanggil fungsi
bersama nilai yang dikembalikan fungsi.
Sintaks:
RETURN ekspresi;
Dalam satu fungsi dimungkinkan penggunaan RETURN yang lebih dari satu tetapi bila di
dalam badan fungsi tidak terdapat pernyataan RETURN maka akan terjadi error.
Contoh:
CREATE OR REPLACE FUNCTION tambah (n1 number, n2 number)
RETURN number IS
BEGIN
RETURN(n1+n2);
END;
Cara mengeksekusi :
SQL > SELECT tambah (1,8) FROM dual;
tambah (1,8)
9
Contoh :
CREATE OR REPLACE FUNCTION cariMahasiswa(vnim mahasiswa.nim%TYPE)
RETURN number IS
vnim mahasiswa.nim%TYPE;
BEGIN
SELECT nim FROM mahasiswa WHERE nim = vnim;
IF SQL%FOUND THEN
RETURN 1;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 0;
END cariMahasiswa;
Contoh :
DECLARE
FUNCTION jumMahasiswa
RETURN number IS
jum number;
BEGIN
SELECT COUNT(nim) INTO jum FROM mahasiswa;
RETURN(jum);
END jumMahasiswa;
BEGIN
DBMS_OUTPUT.PUT_LINE('Jumlah mahasiswa saat ini adalah
'||TO_CHAR(jumMahasiswa));
END;
2. Function Ber-Prameter
Sama seperti Procedure berparameter, Function ber-parameter memiliki output yang
dinamis sesuai dengan nilai yang di-assign ke parameter pada function tersebut.
LUAS_PERSEGI_PANJANG(8,3)
24
b. Parameter keluaran
Contoh :
CREATE OR REPLACE FUNCTION volume_tabung
(r IN number, t IN number,luas OUT number)
RETURN number IS
pi number:=3.14;
vol number;
BEGIN
luas:=pi*r*r;
return (luas*t);
END;
Output :
c. Parameter masukan/keluaran
Contoh :
CREATE OR REPLACE FUNCTION volume_tabung_ku (x IN OUT number,
t IN number)
RETURN number IS
pi number:=3.14;
vol number;
BEGIN
x:=pi*x*x;
vol:= x*t;
RETURN (vol);
END;
DECLARE
y number:='&jari_alas';
BEGIN
DBMS_OUTPUT.PUT_LINE('Volume tabung paimen adalah
'||volume_tabung2(y,5));
DBMS_OUTPUT.PUT_LINE('Luas alas lingkaran tabung paimen
adalah '||y);
END;
Output :
Enter value for jari_alas: 2
old 2: L number:='&jari_alas';
new 2: L number:='2';
Volume tabung paimen adalah 62.8
Luas alas lingkaran tabung paimen adalah 12.56
Tugas Pendahuluan :
BEGIN
SELECT sal*0.10,hiredate INTO bonus,hire_date FROM emp WHERE
empno = emp_id;
IF MONTHS_BETWEEN(SYSDATE,hire_date)>60
THEN bonus:=bonus + 500;
END IF;
EXCEPTION
WHEN bonus_missing THEN
END calc_bonus;
BEGIN
DBMS_OUTPUT.PUT_LINE('----------------------');
FOR x IN c_pembayaran LOOP
id:=x.id_reservasi;
SELECT c.nama_pemesan INTO nama FROM reservasi b,
pemesan c WHERE id=b.id_reservasi AND
b.id_pemesan=c.id_pemesan;
DBMS_OUTPUT.PUT_LINE(c_pembayaran%ROWCOUNT||'.'||x.id_
pembayaran||' pada tanggal'||x.tgl_pembayaran||'oleh
'||nama);
END LOOP;
END;
END;
EXECUTE lihat.all_kartu;
Percobaan :
1. Buat sebuah procedure untuk melakukan enkripsi sebuah string yang di-inputkan oleh user.
Jika string yang dihasilkan sama maka keluarkan perintah gagal enkripsi
Contoh hasil tampilan :
SQL> EXECUTE enkripsi('oh semoga nilaiku bagus');
enkripsi berhasil
enkripsi gagal
2. Buatlah fungsi untuk menghasilkan nilai biner dari suatu angka desimal. Tuliskan juga cara
mengeksekusinya.
SQL> SELECT biner(10) FROM dual;
1010