- PL/SQL 教程
- PL/SQL - 首頁
- PL/SQL - 概述
- PL/SQL - 環境
- PL/SQL - 基本語法
- PL/SQL - 資料型別
- PL/SQL - 變數
- PL/SQL - 常量和字面量
- PL/SQL - 運算子
- PL/SQL - 條件語句
- PL/SQL - 迴圈語句
- PL/SQL - 字串
- PL/SQL - 陣列
- PL/SQL - 過程
- PL/SQL - 函式
- PL/SQL - 遊標
- PL/SQL - 記錄
- PL/SQL - 異常處理
- PL/SQL - 觸發器
- PL/SQL - 包
- PL/SQL - 集合
- PL/SQL - 事務
- PL/SQL - 日期和時間
- PL/SQL - DBMS 輸出
- PL/SQL - 面向物件
- PL/SQL 有用資源
- PL/SQL - 問答
- PL/SQL - 快速指南
- PL/SQL - 有用資源
- PL/SQL - 討論
PL/SQL - 函式
本章將討論 PL/SQL 中的函式。函式與過程類似,區別在於函式會返回值。因此,上一章中討論的所有內容也適用於函式。
建立函式
可以使用 **CREATE FUNCTION** 語句建立獨立函式。**CREATE OR REPLACE PROCEDURE** 語句的簡化語法如下:
CREATE [OR REPLACE] FUNCTION function_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
RETURN return_datatype
{IS | AS}
BEGIN
< function_body >
END [function_name];
其中:
function-name 指定函式的名稱。
[OR REPLACE] 選項允許修改現有函式。
可選引數列表包含引數的名稱、模式和型別。IN 表示從外部傳遞的值,OUT 表示用於將值返回到過程外部的引數。
函式必須包含 **return** 語句。
RETURN 子句指定要從函式返回的資料型別。
function-body 包含可執行部分。
建立獨立函式時使用 AS 關鍵字代替 IS 關鍵字。
示例
以下示例演示如何建立和呼叫獨立函式。此函式返回 customers 表中 CUSTOMERS 的總數。
我們將使用 CUSTOMERS 表,該表在 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;
/
使用 SQL 提示符執行上述程式碼後,將產生以下結果:
Function created.
呼叫函式
建立函式時,您定義了函式需要執行的任務。要使用函式,您必須呼叫該函式來執行已定義的任務。當程式呼叫函式時,程式控制權將轉移到被呼叫的函式。
被呼叫的函式執行已定義的任務,當執行其 return 語句或到達 **最後一個 end 語句** 時,它將程式控制權返回給主程式。
要呼叫函式,您只需將所需的引數與函式名稱一起傳遞,如果函式返回值,則可以儲存返回值。以下程式從匿名塊中呼叫函式 **totalCustomers**:
DECLARE
c number(2);
BEGIN
c := totalCustomers();
dbms_output.put_line('Total no. of Customers: ' || c);
END;
/
在 SQL 提示符下執行上述程式碼後,將產生以下結果:
Total no. of Customers: 6 PL/SQL procedure successfully completed.
示例
以下示例演示了宣告、定義和呼叫一個簡單的 PL/SQL 函式,該函式計算並返回兩個值的較大值。
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;
/
在 SQL 提示符下執行上述程式碼後,將產生以下結果:
Maximum of (23,45): 45 PL/SQL procedure successfully completed.
PL/SQL 遞迴函式
我們已經看到,程式或子程式可以呼叫另一個子程式。當子程式呼叫自身時,稱為遞迴呼叫,此過程稱為 **遞迴**。
為了說明這個概念,讓我們計算一個數字的階乘。數字 n 的階乘定義為:
n! = n*(n-1)!
= n*(n-1)*(n-2)!
...
= n*(n-1)*(n-2)*(n-3)... 1
以下程式透過遞迴呼叫自身來計算給定數字的階乘:
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;
/
在 SQL 提示符下執行上述程式碼後,將產生以下結果:
Factorial 6 is 720 PL/SQL procedure successfully completed.