CREATE FUNCTION 语句 (PL/SQL)

CREATE FUNCTION 语句用于定义存储在数据库中的标量函数或管道函数。

调用

标量函数在每次被调用时返回单一的值,并且,在 SQL 表达式有效的位置,标量函数通常都有效。管道函数用于计算表,一次计算一行,并且可以在 SELECT 语句的 FROM 子句中引用管道函数。

可以从 Db2® 命令行处理器、任何受支持的交互式 SQL 界面、应用程序或例程中执行此语句。

权限

此语句的授权标识所拥有的特权必须至少包括下列其中一项:
  • 如果此函数的模式名不存在:对数据库的 IMPLICIT_SCHEMA 权限
  • 如果此函数的模式名引用现有的模式:对该模式的 CREATEIN 特权
  • DBADM 权限

此语句的授权标识所拥有的特权还必须包括调用函数体中指定的 SQL 语句所需的所有特权。

如果指定了 OR REPLACE,那么此语句的授权标识必须是匹配的函数的所有者 (SQLSTATE 42501)。

语法

阅读语法图跳过直观语法图CREATE OR REPLACE FUNCTION名称(,参数名INOUTIN OUT数据类型default-clause)RETURNreturn-type PIPELINED ISASdeclarationBEGIN 语句 EXCEPTIONWHEN异常OR异常THEN语句END名称

描述

CREATE FUNCTION 语句指定函数的名称、可选参数、函数的返回类型以及函数的主体。函数的主体是括在 BEGIN 和 END 关键字中的块。它可以包含可选的 EXCEPTION 节,该节定义发生已定义的异常条件时执行的操作。

OR REPLACE
指示当模式中已存在同名的函数时,新函数将替换现有函数。如果未指定此选项,那么新函数无法替换同一模式中现有的同名函数。
FUNCTION 名称
指定函数的标识。
参数名
指定参数的名称。此名称不能与参数列表中的任何其他参数名相同 (SQLSTATE 42734)。
data-type
指定其中一种受支持的 PL/SQL 数据类型。
RETURN return-type
指定函数所返回的标量值的数据类型。
PIPELINED
指定所创建的函数是管道函数。
IS 或 AS
引入用于定义函数体的块。
declaration
指定一个或多个变量、游标或 REF CURSOR 类型声明。
statement
指定一个或多个 PL/SQL 程序语句。每个语句都必须以分号终止。
异常
指定异常条件名。

注意

PL/SQL 函数不能执行任何将要更改数据库管理器未管理的对象的状态的操作。

可以采用已模糊化的格式来提交 CREATE FUNCTION 语句。在已模糊化的语句中,只有函数名可读。按照下面这样一种方式对该语句的其余内容进行编码:这些内容不可读,但是可由数据库服务器解码。可以通过调用 DBMS_DDL.WRAP 函数来生成模糊化的语句。

示例

以下示例演示没有参数的基本函数:
CREATE OR REPLACE FUNCTION simple_function
    RETURN VARCHAR2
IS
BEGIN      
    RETURN 'That''s All Folks!';
END simple_function;
以下示例演示接受两个输入参数的函数:
CREATE OR REPLACE FUNCTION emp_comp (
     p_sal           NUMBER,
     p_comm          NUMBER )
RETURN NUMBER
IS
BEGIN      
    RETURN (p_sal + NVL(p_comm, 0)) * 24;
END emp_comp;
以下示例说明了一个管道函数,它将返回一个具有两行的表:
CREATE TYPE row_typ as OBJECT(f1 NUMBER, f2 VARCHAR2(10))

CREATE TYPE arr_typ as TABLE OF row_typ

CREATE FUNCTION pipe_func
RETURN arr_typ
PIPELINED
IS
BEGIN      
    PIPE ROW (1, 'one');
    PIPE ROW (2, 'two');
    RETURN;
END pipe_func;