Sebuah fungsi sama seperti sebuah prosedur kecuali bahwa fungsi mengembalikan sebuah nilai. Oleh karena itu, semua pembahasan dari bab sebelumnya juga berlaku untuk fungsi.
Membuat Function
Sebuah fungsi mandiri dibuat menggunakan pernyataan CREATE FUNCTION. Berikut ini adalah sintaks sederhana untuk pernyataan CREATE FUNCTION:
CREATE [OR REPLACE] FUNCTION function_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] RETURN return_datatype {IS | AS} BEGIN < function_body > END [function_name];
Keterangan
- function-name menentukan nama fungsi.
- Opsi [OR REPLACE] memungkinkan modifikasi dari fungsi yang sudah ada.
- Daftar parameter yang bersifat opsional berisi nama, mode, dan tipe data dari parameter-parameter tersebut. IN menandakan nilai yang akan diteruskan dari luar, sedangkan OUT mewakili parameter yang akan digunakan untuk mengembalikan nilai dari fungsi.
- Fungsi harus mengandung pernyataan RETURN.
- Klausa RETURN menentukan tipe data yang akan dikembalikan oleh fungsi.
- function-body berisi bagian eksekusi dari fungsi.
- Kata kunci AS digunakan sebagai pengganti kata kunci IS untuk membuat fungsi mandiri.
Contoh
Berikut ini adalah contoh untuk membuat dan memanggil fungsi mandiri. Fungsi ini mengembalikan jumlah total CUSTOMERS dalam tabel customers.
Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | +----+----------+-----+-----------+----------+
CREATE OR REPLACE FUNCTION totalCustomers RETURN number IS total number(2) := 0; BEGIN SELECT count(*) into total FROM customers; RETURN total; END; /
Output
Function created.
Memanggil Function
Saat membuat sebuah fungsi, Anda memberikan definisi tentang apa yang fungsi harus lakukan. Untuk menggunakan sebuah fungsi, Anda harus memanggil fungsi tersebut untuk menjalankan tugas yang telah ditentukan. Ketika sebuah program memanggil sebuah fungsi, kontrol program akan dialihkan ke fungsi yang dipanggil.
Fungsi yang dipanggil akan menjalankan tugas yang telah ditentukan, dan ketika pernyataan return dijalankan atau ketika pernyataan end terakhir dicapai, kontrol program akan kembali ke program utama.
Untuk memanggil sebuah fungsi, Anda hanya perlu meneruskan parameter yang diperlukan bersama dengan nama fungsi, dan jika fungsi mengembalikan nilai, Anda dapat menyimpan nilai yang dikembalikan tersebut. Program berikut memanggil fungsi totalCustomers dari sebuah blok anonim.
DECLARE c number(2); BEGIN c := totalCustomers(); dbms_output.put_line('Total no. of Customers: ' || c); END; /
Ketika kode di atas dijalankan pada prompt SQL, maka akan menghasilkan hasil berikut:
Total no. of Customers: 6 PL/SQL procedure successfully completed.
Contoh
Berikut adalah contoh yang menunjukkan deklarasi, definisi, dan pemanggilan fungsi PL/SQL sederhana yang menghitung dan mengembalikan nilai maksimum dari dua nilai:
DECLARE a number; b number; c number; FUNCTION findMax(x IN number, y IN number) RETURN number IS z number; BEGIN IF x > y THEN z:= x; ELSE Z:= y; END IF; RETURN z; END; BEGIN a:= 23; b:= 45; c := findMax(a, b); dbms_output.put_line(' Maximum of (23,45): ' || c); END; /
Ketika kode di atas dijalankan pada prompt SQL, maka akan menghasilkan hasil berikut:
Maximum of (23,45): 45 PL/SQL procedure successfully completed.
Fungsi rekursif dalam PL/SQL
Telah kita lihat bahwa sebuah program atau subprogram dapat memanggil subprogram lainnya. Ketika sebuah subprogram memanggil dirinya sendiri, itu disebut sebagai pemanggilan rekursif dan proses tersebut dikenal sebagai rekursi.
Untuk mengilustrasikan konsep tersebut, mari kita hitung faktorial dari sebuah bilangan. Faktorial dari sebuah bilangan n didefinisikan sebagai
n! = n*(n-1)! = n*(n-1)*(n-2)! ... = n*(n-1)*(n-2)*(n-3)... 1
Program berikut menghitung faktorial dari sebuah bilangan yang diberikan dengan memanggil dirinya sendiri secara rekursif:
DECLARE num number; factorial number; FUNCTION fact(x number) RETURN number IS f number; BEGIN IF x=0 THEN f := 1; ELSE f := x * fact(x-1); END IF; RETURN f; END; BEGIN num:= 6; factorial := fact(num); dbms_output.put_line(' Factorial '|| num || ' is ' || factorial); END; /
Ketika kode di atas dieksekusi pada prompt SQL, akan menghasilkan hasil berikut:
Factorial 6 is 720 PL/SQL procedure successfully completed.
Sumber: https://www.tutorialspoint.com/plsql/plsql_functions.htm