Function
Perbedaan
mendasar antara function dan procedure adalah bahwa function harus
mengembalikan nilai tertentu kepada pemanggilnya. Nilai ini dikembalikan
dengan menggunakan sintaks RETURN.
Non Nested Function
Disebut
juga stored function yang mirip dengan stored procedure tetapi harus
memberikak output sebuah nilai. Function ini tersimpan dalam basis data.
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
v_nim 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 cariPegawai;
|
Contoh pemanggilan fungsi:
declare
begin
IF(cariMahasiswa('30108002') = 1) THEN;
dbms_output.put_line('mahasiswa terdaftar');
ELSE
dbms_output.put_line('mahasiswa tidak terdaftar');
END IF;
end;
|
Untuk meng-compile ulang sebuah function digunakan sintaks berikut
ALTER FUNCTION nama_fungsi COMPILE;
|
Sedangkan untuk menghapus funsi digunakan sintaks berikut
DROP FUNCTION nama_fungsi;
|
Nested Function
Seperti
nested procedure, fungsi ini adalah fungsi yang dideklarasikan dalam
suatu blok PL/SQL, tidak tersimpan dalam basis data dana hanya bisa
dipanggil oleh blok dimana fungsi dideklarasikan.
Contoh:
DECLARE
jum number;
FUNCTION tambah(n1 number, n2 number)
RETURN number IS
BEGIN
RETURN(n1+n2);
END tambah;
BEGIN
jum:=tambah(2,3);
dbms_output.put_line('Hasil penjumlahan antara 2 dan 3 adalah '||TO_CHAR(jum));
END;
|
- JENIS-JENIS FUNCTION :
1. FUNCTION TANPA PARAMETER
Function ini tidak memiliki parameter/argumen biasanya
bersifat statis setiap kali dieksekusi.
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-PARAMETER
Sama
seperti Procedure berparameter, Function ber-parameter memiliki
outputan yang dinamis sesuai dengan nilai yang diassign ke parameter
pada function tersebut. Adapun parameter yang dimaksud disini adalah :
a. Parameter masukan
Contoh :
CREATE OR REPLACE FUNCTION luas_persegi_panjang
(p number,l number)
RETURN number
IS
BEGIN
RETURN (p*l);
END;
|
Salah satu cara untuk mengeksekusinya dengan menggunakan klausa SELECT sepertidi bawah ini :
SQL> SELECT luas_persegi_panjang (8,3) FROM dual;
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;
|
Misal digunakan blok PL/SQL untuk menjalankan fungsi diatas :
declare
L_alas number;
begin
dbms_output.put_line('Volume tabung paijo adalah '||volume_tabung(2,5,L_alas));
dbms_output.put_line('Luas alas lingkaran pada tabung paijo adalah '||L_alas);
end;
|
- Output :
Volume tabung paijo adalah 62.8
Luas alas lingkaran pada tabung paijo adalah 12.56
Contoh di atas menunjukan bahwa function dapat mengembalikan lebih dari satu nilai lewat parameter OUT.
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;
|
digunakan blok PL/SQL berikut untuk menjalankan fungsi diatas :
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
Tidak ada komentar:
Posting Komentar