Chủ Nhật, 19 tháng 9, 2021

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é.

Mục lục

  • 1. Function trong Oracle
  • 2. Ví dụ Function trong Oracle
  • 3. Gọi function trong Oracle
  • 4. Một ví dụ khác về function trong Oracle
  • 5. Một ví dụ về xử lý với table
  • 6. Function đệ quy trong Oracle
  • 7. Lệnh xóa function trong Oracle
  • 8. Lời kết

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
1
2
3
4
5
6
7
8
9
10
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ố.

1
2
3
4
5
6
7
8
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.

create or replace adder(n1 in number, n2 in number) -- n1, n2 là các tham số của hàm

return number -- kiểu dữ liệu trả về

is

n3 number(8); -- khai báo biến dùng trong hàm

begin

n3 := n1+n2;

return n3; -- trả kết quả

end;

3. Gọi function trong Oracle

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

1
2
3
4
5
6
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:

1
2
3
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ố.

1
2
3
4
5
6
7
8
9
10
11
12
13
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:

1
2
3
4
5
6
7
8
9
10
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:

customer data png

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:

1
2
3
4
5
6
7
8
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.

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

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

1
2
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é.

1
2
3
4
5
6
7
8
9
10
11
12
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.

1
2
3
4
5
6
7
8
9
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
1
DROP FUNCTION function_name;

Ví dụ
1
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.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, oracle oca, oracle ocp, oracle ocm

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master