云数据库 GAUSSDB-CREATE FUNCTION:参数说明

时间:2024-01-23 20:08:43

参数说明

  • function_name

    要创建的函数名称(可以用模式修饰)。

    取值范围:字符串,要符合标识符的命名规范。

  • argname

    函数参数的名称。

    取值范围:字符串,要符合标识符的命名规范。

  • argmode

    函数参数的模式。

    取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。

    VARIADIC用于声明数组类型的参数。

  • argtype

    函数参数的类型。

  • expression

    参数的默认表达式。

  • rettype

    函数返回值的数据类型。

    如果存在OUT或IN OUT参数,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。

    SETOF修饰词表示该函数将返回一个集合,而不是单独一项。

  • column_name

    字段名称。

  • column_type

    字段类型。

  • definition

    一个定义函数的字符串常量,含义取决于语言。它可以是一个内部函数名称、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。

  • LANGUAGE lang_name

    用以实现函数的语言的名称。可以是SQL,C,internal,或者是用户定义的过程语言名称。为了保证向下兼容,该名称可以用单引号(包围)。若采用单引号,则引号内必须为大写。

  • WINDOW

    表示该函数是窗口函数,通常只用于C语言编写的函数。替换函数定义时不能改变WINDOW属性。

    自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。

  • IMMUTABLE

    表示该函数在给出同样的参数值时总是返回同样的结果。

  • STABLE

    表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。

  • VOLATILE

    表示该函数值可以在一次表扫描内改变,因此不会做任何优化。

  • SHIPPABLE

    NOT SHIPPABLE

    表示该函数是否可以下推到DN上执行。

    • 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。
    • 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。

    对于指定了SHIPPABLE/IMMUABLE的函数或者存储过程,其不能包含EXCEPTION或调用含有EXCEPTION的函数或者存储过程。

  • PACKAGE
    表示该函数是否支持重载。
    • 不允许package函数和非package函数重载或者替换。
    • package函数不支持VARIADIC类型的参数。
    • 不允许修改函数的package属性。
  • LEAKPROOF

    指出该函数的参数只包括返回值。LEAKPROOF只能由系统管理员设置。

  • CALLED ON NULL INPUT

    表明该函数的某些参数是NULL的时候可以按照正常的方式调用。该参数可以省略。

  • RETURNS NULL ON NULL INPUT

    STRICT

    STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。

    RETURNS NULL ON NULL INPUT和STRICT的功能相同。

  • EXTERNAL

    目的是和SQL兼容,是可选的,这个特性适合于所有函数,而不仅是外部函数。

  • SECURITY INVOKER

    AUTHID CURRENT_USER

    表明该函数将带着调用它的用户的权限执行。该参数可以省略。

    SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。

  • SECURITY DEFINER

    AUTHID DEFINER

    声明该函数将以创建它的用户的权限执行。

    AUTHID DEFINER和SECURITY DEFINER的功能相同。

  • FENCED

    NOT FENCED

    该参数用于声明函数是在保护模式还是非保护模式下执行。如果函数声明为NOT FENCED模式,则函数的执行在CN或者DN进程中进行。如果函数声明为FENCED模式,则函数在新fork的进程执行,这样函数的异常不会影响CN或者DN进程。

    FENCED/NOT FENCED模式的选择:

    • 正在开发或者调试的Function使用FENCED模式。开发测试完成,使用NOT FENCED模式执行,减少fork进程以及通信的开销。
    • 复杂的操作系统操作,例:打开文件,信号处理,线程处理等操作,使用FENCED模式。否则可能影响 GaussDB 数据库的执行。
    • 用户自定义C函数,如果不指定该参数,默认为FENCED。
    • 用户自定义PL/Java函数,如果不指定该参数,默认为FENCED, 且不支持指定为NOT FENCED执行模式。
    • 用户自定义PL/pgSQL函数,如果不指定该参数,默认为NOT FENCED,且不支持指定为FENCED执行模式。
  • COST execution_cost

    用来估计函数的执行成本。

    execution_cost以cpu_operator_cost为单位。

    取值范围:正数

  • ROWS result_rows

    估计函数返回的行数。用于函数返回的是一个集合。

    取值范围:正数,默认值是1000行。

  • configuration_parameter
    • value

      把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。

      取值范围:字符串

      • DEFAULT
      • OFF
      • RESET

      指定默认值。

    • from current

      取当前会话中的值设置为configuration_parameter的值。

  • obj_file, link_symbol

    适用于C语言函数,字符串obj_file指定了动态库的绝对路径;link_symbol指定了该函数的链接符号,也就是该函数在C代码中的函数名称。

  • plsql_body

    PL/SQL存储过程体。

    当在函数体中创建用户时,日志中会记录密码的明文。因此不建议用户在函数体中创建用户。

support.huaweicloud.com/devg-v1-gaussdb/gaussdb_devg_0539.html