本文介紹如何創建子函數。

函數聲明中指定的 FUNCTION 子句用于指定和命名該塊本地的子函數。

術語指SPL塊結構,該結構由可選的聲明部分、必需的可執行部分和可選的異常部分組成。塊是獨立存儲過程和函數、匿名塊、子程序、觸發器、包和對象類型方法的結構。

短語標識符是塊本地的意味著標識符(即,變量、游標、類型或子程序)在該塊的聲明部分中聲明,因此可由 SPL 代碼在該塊的可執行部分和可選異常部分中進行訪問。

子函數只能在聲明部分中包括所有其他變量、游標和類型后聲明。(也就是說,子程序必須是最后一組聲明。)

FUNCTION name [ (parameters) ]{ IS | AS }
    [ PRAGMA AUTONOMOUS_TRANSACTION; ]
    [ declarations ]
  BEGIN
    statements
  END [ name ];
表 1. 參數
參數 說明
name name 是子函數的標識符。
parameters parameters 是形參的列表。
data_type data_type 是函數的 RETURN 語句所返回值的數據類型。
PRAGMA AUTONOMOUS_TRANSACTION PRAGMA AUTONOMOUS_TRANSACTION 是將子函數設置為自治事務的指令。
declarations declarations 是變量、游標、類型或子程序聲明。如果包括子程序聲明,則它們必須在所有其他變量、游標和類型聲明之后。
statements statements 是 SPL 程序語句(BEGIN - END 塊可以包含 EXCEPTION 部分)。

示例

以下示例顯示如何使用遞歸子函數:

DECLARE
    FUNCTION factorial (
        n           BINARY_INTEGER
    ) RETURN BINARY_INTEGER
    IS
    BEGIN
        IF n = 1 THEN
            RETURN n;
        ELSE
            RETURN n * factorial(n-1);
        END IF;
    END factorial;
BEGIN
    FOR i IN 1..5 LOOP
        DBMS_OUTPUT.PUT_LINE(i || '! = ' || factorial(i));
    END LOOP;
END;

該示例的輸出如下:

1! = 1
2! = 2
3! = 6
4! = 24
5! = 120