#自定义函数
自定义函数是数据库里的一种PL/SQL对象,简称UDF。
分布式部署中不支持UDF。
# 创建自定义函数
使用CREATE FUNCTION语句创建自定义函数,其语法定义为:
create function::=
function_head_clause::=
invoker_rights_clause::=
function_body_clause::=
# or replace
当要创建的自定义函数已经存在时,将其进行重建。
# editionable | noneditionable
用于语法兼容,无实际含义。
# function_name
自定义函数的名称,,不可省略,且需符合YashanDB的对象命名规范。
# argument_define
自定义函数的参数(形参),可省略,此时function_name()=function_name。最多可以指定4095个参数。
# return_datatype
自定义函数的返回值类型,此处为隐式形参,因此不可以为其指定长度、精度等属性。
# invoker_rights_clause
见首页invoker_rights_clause部分描述。
# variable_declare
声明PL/SQL过程体的全局变量,可省略。
# plsql_statements
定义过程体中的执行语句,为PL/SQL语句中的一项或多项。
过程体中的每个执行路径(流程控制语句的分支,异常处理单元的分支)里都必须包含至少一个RETURN Statement。
示例
CREATE OR REPLACE FUNCTION ya_proc(i INT) RETURN VARCHAR
IS
BEGIN
CASE i
WHEN 1 THEN
RETURN 'hello';
WHEN 2 THEN
RETURN 'world';
END CASE;
END ya_proc;
/
# 运行自定义函数
# sql语句中调用
与内置函数的调用方法相同,作为SQL表达式使用,例如:
SELECT function_name(arguments) FROM dual;
arguments为与argument_define一一对应的实参。
值得注意的是,对于一个定义了IN OUT或OUT形参的自定义函数,并不支持通过此种方式调用。
示例
SELECT ya_proc(1)||' '||ya_proc(2) FROM dual;
YA_PROC(1)||''||YA_P
----------------------------------------------------------------
hello world
# 过程体中调用
与内置函数的调用方法相同,作为表达式在PLSQL语句中使用,或者用于给变量赋值,例如:
variable_name := procedure_name(arguments);
arguments为与argument_define一一对应的实参。
示例
DECLARE
a VARCHAR(10);
b VARCHAR(10);
BEGIN
a := ya_proc(1);
b := ya_proc(2);
DBMS_OUTPUT.PUT_LINE(a||' '||b);
END;
/
--result
hello world
# 删除自定义函数
使用DROP FUNCTION语句删除自定义函数。