本文介绍如何创建子函数。
函数声明中指定的 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