CREATE FUNCTION
功能描述
创建一个自定义函数。
语法格式
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE [AGGREGATE] FUNCTION function_name ( [ { argname argtype } ] [, ...] ] ) [ RETURNS [SETOF] rettype | RETURNS TABLE ( { column_name column_type } [, ...] )] LANGUAGE lang_name [ { IMMUTABLE | STABLE | VOLATILE } ] RUNTIME_VERSION = { 'version' } HANDLER = 'function_name' COMMENT = 'comment' [ STRICT ] [ PACKAGES = ( 'package_name==[version]' [ , ...] ) ] [ IMPORTS = ( 'obs_file_path' ) ] [ AS 'definition' ] |
参数说明
参数 | 描述 | 取值范围 |
|---|---|---|
function_name | 要创建的函数名字(可以用模式修饰)。 | 字符串,需符合标识符的命名规范。 创建函数时,建议指定schema,否则会在默认的schema default_db下创建函数。调用自定义函数时必须指定schema,否则系统会调用系统内置函数。 |
argname | 函数参数的名字。 | 字符串,需符合标识符的命名规范。 |
argtype | 函数参数的类型。 | 详情请参见数据类型映射。 |
rettype | 函数返回值的数据类型。 | 详情请参见数据类型映射。 |
column_name | 字段名称。 | - |
column_type | 字段类型。 | - |
LANGUAGE lang_name | 用于实现函数的语言的名字。自定义函数仅支持Python。 | - |
AGGREGATE | 表示function是否为聚合函数。 | - |
IMMUTABLE | 表示该函数在给出同样的参数值时总是返回同样的结果。 | 如果函数的入参是常量,会在优化器阶段计算该函数的值。优势是可以尽早获取表达式的值,从而能更准确地进行代价估算,生成的执行计划也更优。 |
STABLE | 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 | - |
VOLATILE | 表示该函数值可以在一次表扫描内改变,因此不会做任何优化。 | - |
PACKAGES | 表示该函数运行时环境所依赖的Python三方包。 | - |
RUNTIME_VERSION | 表示函数运行时环境的Python的具体版本。当前仅支持指定为3.11系列。 | - |
HANDLER | 表示函数的主函数入口。 | - |
IMPORTS | 表示函数运行时所依赖在OBS的压缩包路径 | IMPORTS子句中只能引入一个路径,即一个压缩包。 |
STRICT | STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。 | - |
definition | 函数体的具体实现。 | 默认为null,其长度不能超过1000字符。 |
comment | 对函数的描述信息。 | - |

