PL/SQL – Functions – SMK Wahidin Arjawinangun

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

Leave a Reply

Your email address will not be published. Required fields are marked *

v77slot