CREATE FUNCTION (SQL)
将 SQL 表达式存储为函数,以在查询中使用。用户定义的 SQL 函数对于执行复杂的查询和组合 Vertica 内置函数很有用。您只需在给定查询中调用该函数。如果搜索路径中存在多个具有相同名称和实参类型的 SQL 函数,Vertica 将调用它找到的第一个匹配项。
SQL 函数在所有情况下都被修整,包括 DDL。
语法
CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS ]
[[database.]schema.]function( [ arg_list ] )
RETURN return_type
AS
BEGIN
RETURN expression;
END;
参数
OR REPLACE
- 如果存在相同名称和实参的函数,请将其替换。如果您只更改函数实参,Vertica 会忽略此选项并使用相同的名称保留这两个函数。
OR REPLACE 和 IF NOT EXISTS 是互斥的。
IF NOT EXISTS
如果存在具有相同名称和实参的函数,则会返回该函数而不会创建它。
OR REPLACE 和 IF NOT EXISTS 是互斥的。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
function
- 要创建的 SQL 函数,其中 function 符合标识符中描述的约定。
-
arg_list
- 实参名称及其数据类型的逗号分隔列表,按以下格式指定:
argname argtype[,...]
其中:
-
argname 为传递给 function 的实参的名称。
-
argtype 为 argname 的数据类型。
-
-
return_type
- 此函数返回的数据类型。
-
RETURN 表达式
- SQL 函数主体,其中 expression 可能包含 CREATE FUNCTION 语句中指定的内置函数、运算符和实参名称。
表达式末尾的分号是必需的。
注意
CREATE FUNCTION 仅允许一个 RETURN 表达式。Return 表达式不支持以下内容:
-
FROM、WHERE、GROUP BY、ORDER BY 和 LIMIT 子句
-
聚合、分析和元函数
-
特权
非超级用户:
-
函数架构的 CREATE 权限
-
函数库的 USAGE 权限
严格性和可变性
Vertica 根据 SQL 函数的定义推断该函数的 严格性和可变性( 稳定、 不可变或 易变)。然后,Vertica 确定使用是否正确,例如期待不可变函数却提供了易变函数的情况。
SQL 函数和视图
可以在使用 SQL 函数的查询中创建视图,然后查询这些视图。创建视图时,SQL 函数会将对用户定义的函数的调用替换为视图定义中的函数主体。因此,当用户定义的函数的主体被替换后,视图也应被替换。
示例
请参阅创建用户定义的 SQL 函数。