PL / SQL - Hàm

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 chức năng

Một chức năng độc lập được tạo bằng cách sử dụng CREATE FUNCTIONtuyên bố. Cú pháp đơn giản choCREATE OR REPLACE PROCEDURE tuyên bố 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 return tuyên bố.

  • Các RETURN khoản quy định cụ thể gõ dữ liệu bạn đang đi để 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 tác vụ đã xác định và khi câu lệnh trả về của nó được thực thi hoặc khi last end statement đạt được, nó 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 gọi hàmtotalCustomers 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.

Các 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àrecursion.

Để 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.