本文介紹如何創建子函數。
函數聲明中指定的 FUNCTION 子句用于指定和命名該塊本地的子函數。
術語塊指SPL塊結構,該結構由可選的聲明部分、必需的可執行部分和可選的異常部分組成。塊是獨立存儲過程和函數、匿名塊、子程序、觸發器、包和對象類型方法的結構。
短語標識符是塊本地的意味著標識符(即,變量、游標、類型或子程序)在該塊的聲明部分中聲明,因此可由 SPL 代碼在該塊的可執行部分和可選異常部分中進行訪問。
子函數只能在聲明部分中包括所有其他變量、游標和類型后聲明。(也就是說,子程序必須是最后一組聲明。)
FUNCTION name [ (parameters) ]{ IS | AS }
[ PRAGMA AUTONOMOUS_TRANSACTION; ]
[ declarations ]
BEGIN
statements
END [ name ];
參數 | 說明 |
---|---|
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