Thứ Tư, 26 tháng 10, 2022

PL / SQL - Hàm (function)

Trong chương này, chúng ta sẽ thảo luận về các hàm trong PL/SQL. Một hàm giống như một thủ tục ngoại trừ nó trả về một giá trị. Do đó, tất cả các thảo luận của chương trước cũng đúng cho các hàm.

Tạo một hàm

Một hàm độc lập được tạo bằng cách sử dụng câu lệnh CREATE FUNCTION . Cú pháp đơn giản cho câu lệnh CREATE OR REPLACE PROCEDURE như sau:

CREATE [OR REPLACE] FUNCTION function_name 

[(parameter_name [IN | OUT | IN OUT] type [, ...])] 

RETURN return_datatype 

{IS | AS} 

BEGIN 

   < function_body > 

END [function_name];


Ở đâu,

  • function-name chỉ định tên của hàm.

  • Tùy chọn [HOẶC THAY THẾ] cho phép sửa đổi một chức năng hiện có.

  • Danh sách tham số tùy chọn chứa tên, chế độ và các loại tham số. IN đại diện cho giá trị sẽ được truyền từ bên ngoài và OUT đại diện cho tham số sẽ được sử dụng để trả về một giá trị bên ngoài thủ tục.

  • Hàm phải chứa một câu lệnh trả về .

  • Mệnh đề RETURN chỉ định kiểu dữ liệu bạn sẽ trả về từ hàm.

  • function-body chứa phần thực thi.

  • Từ khóa AS được sử dụng thay cho từ khóa IS để tạo một hàm độc lập.

Thí dụ

Ví dụ sau minh họa cách tạo và gọi một hàm độc lập. Hàm này trả về tổng số KHÁCH HÀNG trong bảng khách hàng.

Chúng ta sẽ sử dụng bảng CUSTOMERS, mà chúng ta đã tạo trong chương Biến PL/SQL -

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; 

/

Khi đoạn mã trên được thực thi bằng lời nhắc SQL, nó sẽ tạo ra kết quả sau:

Function created.


Gọi một hàm

Trong khi tạo một hàm, bạn đưa ra định nghĩa về những gì hàm phải làm. Để sử dụng một hàm, bạn sẽ phải gọi hàm đó để thực hiện tác vụ đã xác định. Khi một chương trình gọi một chức năng, điều khiển chương trình được chuyển đến chức năng được gọi.

Một hàm được gọi thực hiện nhiệm vụ đã xác định và khi câu lệnh trả về của nó được thực thi hoặc khi đến câu lệnh kết thúc cuối cùng , nó sẽ trả lại điều khiển chương trình trở lại chương trình chính.

Để gọi một hàm, bạn chỉ cần chuyển các tham số cần thiết cùng với tên hàm và nếu hàm trả về một giá trị, thì bạn có thể lưu trữ giá trị trả về. Chương trình sau đây gọi hàm totalCustomers từ một khối ẩn danh -

DECLARE 

   c number(2); 

BEGIN 

   c := totalCustomers(); 

   dbms_output.put_line('Total no. of Customers: ' || c); 

END; 

/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Total no. of Customers: 6  


PL/SQL procedure successfully completed. 


Thí dụ

Ví dụ sau minh họa Khai báo, Định nghĩa và Gọi một hàm PL/SQL đơn giản tính toán và trả về tối đa hai giá trị.

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; 

/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Maximum of (23,45): 45   


PL/SQL procedure successfully completed. 


Hàm đệ quy PL/SQL

Chúng ta đã thấy rằng một chương trình hoặc chương trình con có thể gọi một chương trình con khác. Khi một chương trình con gọi chính nó, nó được gọi là một cuộc gọi đệ quy và quá trình này được gọi là đệ quy .

Để minh họa khái niệm, chúng ta hãy tính giai thừa của một số. Giai thừa của một số n được định nghĩa là -

n! = n*(n-1)! 

   = n*(n-1)*(n-2)! 

      ... 

   = n*(n-1)*(n-2)*(n-3)... 1 


Chương trình sau đây tính giai thừa của một số nhất định bằng cách gọi chính nó một cách đệ quy:

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; 

/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Factorial 6 is 720 

  

PL/SQL procedure successfully completed.


=============================
* 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

=============================
PL/SQL, 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 oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

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