Tìm hiểu Function trong Oracle

Bài này chúng ta sẽ nói về Function trong Oracle, nó có chức năng tương tự như procedure, tuy nhiên vẫn có điểm khác biệt và chi tiết như thế nào thì hãy đọc bài này nhé.

1. Function trong Oracle

Trong Oracle, một function là một hàm dùng để xử lý một chức năng nào đó và nó sẽ trả về một giá trị duy nhất. Tương tự như các phần khác, bạn phải định nghĩa và khởi tạo function trước khi sử dụng được nó.

Có một số function có sẵn như hàm MIN, MAX, COUNT, ... đó là những function mà Oracle đã cung cấp sẵn cho chúng ta.

Cú pháp
CREATE [OR REPLACE] FUNCTION function_name  
   [ (parameter [,parameter]) ]  
RETURN return_datatype  
IS | AS  
 [declaration_section]  
BEGIN  
   executable_section  
[EXCEPTION  
   exception_section]  
END [function_name]; <br><br><br><br><br><br><br><br><br>

Tương tự như procedure, bạn cần chú ý đến một số đặc điểm sau:

  • [OR REPLACE] Nếu được khai báo thì nó sẽ xóa function cũ nếu trùng tên với function mới
  • [ (parameter [,parameter]) là các tham số
  • RETURN return_datatype là kiểu dữ liệu sẽ trả về của function
  • [declaration_section]  là các biến định nghĩa dùng trong hàm

Với tham số truyền vào sẽ có 3 loại:

  • IN là tham số chỉ đầu vào
  • OUT là tham số đầu ra
  • IN OUT là tham số vừa đầu vào, vừa đầu ra

2. Ví dụ Function trong Oracle

Bây giơ mình sẽ viết hàm tính tổng của hai số.

CREATE OR REPLACE FUNCTION adder(n1 IN number, n2 IN number)    
RETURN number    
IS    
n3 number(8);    
BEGIN   
n3 :=n1+n2;    
RETURN n3;    
END;

Bạn xem hình mà mình có giải thích ở đây.

3. Gọi function trong Oracle

Sau đây là cách gọi một function mà mình đã tạo ở trên.

DECLARE    
   n3 number(2);    
BEGIN    
   n3 := adder(11,22);    
   dbms_output.put_line('Addition is: ' || n3);    
END;

Chạy thì kết quả sẽ như sau:

Addition is: 33
Statement processed.
0.05 seconds

4. Một ví dụ khác về function trong Oracle

Đây là là hàm tìm số lớn nhất trong hai số.

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;   

Cách dùng:

DECLARE  
   a number;  
   b number;  
   c number;  
BEGIN  
   a:= 23;  
   b:= 45;  
   c := findMax(a, b);  
   dbms_output.put_line(' Maximum of (23,45): ' || c);  
END;  

Hàm này sẽ trả về số lớn nhất trong hai tham số mà ta truyền vào, như vậy kết quả sẽ trả về là 45.

5. Một ví dụ về xử lý với table

Giả sử mình có bảng customer như sau:

Mình sẽ viết một hàm đếm tổng số khách hàng có trong bảng này như sau:

CREATE OR REPLACE FUNCTION totalCustomers  
RETURN number IS  
   total number(2) := 0;  
BEGIN  
   SELECT count(*) into total  
   FROM customers;  
    RETURN total;  
END; 

Và đây là chương trình mình gọi hàm này.

DECLARE  
   c number(2);  
BEGIN  
   c := totalCustomers();  
   dbms_output.put_line('Total no. of Customers: ' || c);  
END; 

Kết quả sẽ trả về là: 

Total no. of Customers: 4
PL/SQL procedure successfully completed.

6. Function đệ quy trong Oracle

Khá thú vị phải không nào? Với các ngôn ngữ lập trình như C,C++ thì thuật toán đệ quy quá quen thuộc rồi, nhưng trong Oracle thì bạn cũng có thể làm được điều đó.

Mình sẽ viết một hàm tính giai thừa. Muốn tính giai thưa thì ta sẽ phải sử dụng vòng lặp, hoặc đệ quy cũng được. Và trong ví dụ này mình sẽ sử dụng đệ quy nhé.

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;  

Cách gọi đến hàm đệ quy này khá đơn giản.

DECLARE  
   num number;  
   factorial number;  
  
BEGIN  
   num:= 6;  
   factorial := fact(num);  
   dbms_output.put_line(' Factorial '|| num || ' is ' || factorial);  
END;  

7. Lệnh xóa function trong Oracle

Nếu bạn muốn xóa một function nào đó thì hãy sử dụng lệnh DROP FUNCTION nhé.

Cú pháp
DROP FUNCTION function_name;  

Ví dụ
DROP FUNCTION fact;  

8. Lời kết

Như vậy là mình đã giới thiệu xong một vài cách sử dụng function trong Oracle, những kiến thức thế này rất bổ ích phải không các bạn, khá thú vị và hấp đẫn.

Mình cũng có đưa ra một vài ví dụ về cách tạo Function, cách gọi Function và xóa Function. Hy vọng nó  sẽ hữu ích với bạn.

Nguồn: freetuts.net