openGauss插件使用指南:SQL语法—CREATE FUNCTION

CREATE FUNCTION

功能描述

创建一个函数。

注意事项

相比于原始的openGauss,dolphin对于CREATE FUNCTION语法的修改为:

  1. 增加 LANGUAGE 默认值 plpgsql。

  2. 增加语法兼容项 [NOT] DETERMINISTIC。

  3. 增加语法兼容项 { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } 。

  4. 增加语法兼容项 SQL SECURITY { DEFINER | INVOKER }。

  5. 增加MySQL风格语法格式。

语法格式

dolphin加载后,CREATE FUNCTION 语法的格式为

  • 兼容PostgreSQL风格的创建自定义函数语法。

    CREATE [ OR REPLACE  ] FUNCTION function_name
        ( [  { argname [ argmode  ] argtype [  { DEFAULT  | :=  | =  } expression  ]
    }  [, ...]  ] )
        [ RETURNS rettype
            | RETURNS TABLE (  { column_name column_type  }  [, ...] )]
        [
            {IMMUTABLE  | STABLE  | VOLATILE}
            | {SHIPPABLE | NOT SHIPPABLE}
            | [ NOT  ] LEAKPROOF
            | WINDOW
            | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT}
            | {[ EXTERNAL| SQL  ] SECURITY INVOKER  | [ EXTERNAL| SQL  ] SECURITY DEFINER | AU
    THID DEFINER  | AUTHID CURRENT_USER}
            | {FENCED | NOT FENCED}
            | {PACKAGE}
            | COST execution_cost
            | ROWS result_rows
            | SET configuration_parameter { {TO | =} value | FROM CURRENT }
            | COMMENT 'text'
            | {DETERMINISTIC | NOT DETERMINISTIC}
            | LANGUAGE lang_name
            | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
        ] [...]
        {
            AS 'definition'
            | AS 'obj_file', 'link_symbol'
        }
    
  • O风格的创建自定义函数的语法。

    CREATE [ OR REPLACE  ] FUNCTION function_name
        ( [  { argname [ argmode  ] argtype [  { DEFAULT | := | =  } expression  ] }
      [, ...]  ] )
        RETURN rettype 
        [
            {IMMUTABLE  | STABLE  | VOLATILE }
            | {SHIPPABLE | NOT SHIPPABLE}
            | {PACKAGE}
            | [ NOT  ] LEAKPROOF
            | {CALLED ON NULL INPUT  | RETURNS NULL ON NULL INPUT  | STRICT }
            | {[ EXTERNAL| SQL  ] SECURITY INVOKER  | [ EXTERNAL| SQL  ] SECURITY DEFINER | |
    AUTHID DEFINER  | AUTHID CURRENT_USER}
            | COST execution_cost
            | ROWS result_rows
            | SET configuration_parameter { {TO | =} value | FROM CURRENT }
            | COMMENT 'text'
            | {DETERMINISTIC | NOT DETERMINISTIC}
            | LANGUAGE lang_name
            | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
         ][...]
         {
            IS | AS
         } plsql_body
    /
    
  • MySQL风格语法格式。

    CREATE [ OR REPLACE  ] FUNCTION function_name
        ( [  { argname [ argmode  ] argtype [  { DEFAULT | := | =  } expression  ] }
      [, ...]  ] )
        RETURNS rettype 
        [
            SQL SECURITY { DEFINER | INVOKER }
            | COMMENT 'text'
            | {DETERMINISTIC | NOT DETERMINISTIC}
            | LANGUAGE lang_name
            | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
         ][...] plsql_body
    

参数说明

  • LANGUAGE lang_name

    用以实现函数的语言的名称。PostgreSQL风格函数默认值 sql, O风格默认值 plpgsql。 MySQL风格语法格式下,LANGUAGE选项仅做语法兼容,可填入其他值,但最终将使用plpgsql作为实现函数的语言。在MySQL风格语法格式下,此选项允许重复。

  • SQL SECURITY INVOKER

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

    SQL SECURITY INVOKER和SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。

    在MySQL风格语法格式下,此选项允许重复,且与SQL SECURITY DEFINER同类别。该类别的函数选项以最后一个输入为准。

  • SQL SECURITY DEFINER

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

    SQL SECURITY DEFINER和AUTHID DEFINER和SECURITY DEFINER的功能相同。

    在MySQL风格语法格式下,此选项允许重复,且与SQL SECURITY INVOKER同类别。该类别的函数选项以最后一个输入为准。

  • CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA

    语法兼容项。此选项允许重复。

示例

--指定 CONTAINS SQL
openGauss=# CREATE FUNCTION func_test (s CHAR(20)) RETURNS int  
CONTAINS SQL AS $$ select 1 $$ ;

--指定 DETERMINISTIC
openGauss=# CREATE FUNCTION func_test (s int) RETURNS int 
CONTAINS SQL DETERMINISTIC  AS $$ select s; $$ ;

--指定 LANGUAGE SQL
openGauss=# CREATE FUNCTION func_test (s int) RETURNS int  
CONTAINS SQL LANGUAGE SQL AS $$ select s; $$ ;

--指定 NO SQL
openGauss=# CREATE FUNCTION func_test (s int) RETURNS int  
NO SQL AS $$ select s; $$ ;

--指定  READS SQL DATA
openGauss=# CREATE FUNCTION func_test (s int) RETURNS int 
CONTAINS SQL  READS SQL DATA  AS $$ select s; $$ ;

--指定 MODIFIES SQL DATA
openGauss=# CREATE FUNCTION func_test (s int) RETURNS int  
CONTAINS SQL LANGUAGE SQL NO SQL  MODIFIES SQL DATA AS $$ select s; $$ ;

--指定 SECURITY DEFINER
openGauss=# CREATE FUNCTION func_test (s int) RETURNS int 
NO SQL SQL SECURITY DEFINER AS $$ select s; $$ ;

--指定 SECURITY INVOKER
openGauss=# CREATE FUNCTION func_test (s int) RETURNS int  
SQL SECURITY INVOKER  READS SQL DATA LANGUAGE SQL AS $$ select s; $$ ;

--MySQL风格语法格式
openGauss=# create function func(n int) returns varchar(50) return (select n+1);
CREATE FUNCTION
openGauss=# select func(1);
 func
------
 2
(1 row)

openGauss=# delimiter //
SET
openGauss=# create function func10(b int) returns int
openGauss-# begin
openGauss-#     if b > 0 then return b + 10;
openGauss-#     else return -1;
openGauss-#     end if;
openGauss-# end//
CREATE FUNCTION
openGauss=# delimiter ;
SET
openGauss=# select func10(9);
 func10
--------
     19
(1 row)

相关链接

CREATE FUNCTION

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL创建函数 SQL创建函数是一种在数据库中定义和使用自定义函数的方法。它允许用户编写自己的函数,以便在SQL查询中使用。创建函数的语法如下: CREATE FUNCTION function_name (parameter1 data_type, parameter2 data_type, ...) RETURNS return_type AS BEGIN -- Function body END; 其中,function_name是函数的名称,parameter1、parameter2等是函数的参数,data_type是参数的数据类型,return_type是函数返回值的数据类型。函数体中包含了函数的具体实现。 ### 回答2: SQLCREATE FUNCTION语句用于在数据库中创建一个自定义函数。函数是一段预定义的可重用的逻辑代码,可以接受参数并返回一个值。 在使用CREATE FUNCTION语句创建函数时,需要指定函数的名称、参数列表、返回值类型以及函数体。函数体是包含了函数的逻辑代码的部分。 下面是一个例子,展示了如何使用CREATE FUNCTION语句创建一个简单的函数: ``` CREATE FUNCTION calculate_area(length INT, width INT) RETURNS INT BEGIN DECLARE area INT; SET area = length * width; RETURN area; END; ``` 在上述例子中,创建了一个名为calculate_area的函数,接受两个参数length和width,并返回一个整数类型的结果。函数体中使用DECLARE语句声明了一个名为area的变量,并使用SET语句计算了长度和宽度的乘积并赋值给area变量。最后,使用RETURN语句返回area变量的值作为函数的结果。 创建完成后,可以通过使用SELECT语句调用这个函数并传入参数来使用它。例如: ``` SELECT calculate_area(10, 5) AS area; ``` 上述SELECT语句将调用calculate_area函数,并传入参数10和5。函数将返回乘积结果,将其命名为area,并将它作为查询结果返回。 通过使用CREATE FUNCTION语句,我们可以方便地在数据库中创建自定义函数,以便在需要时重复使用,并提高了代码的可读性和可维护性。 ### 回答3: SQLCREATE FUNCTION语句用于创建一个自定义函数。函数是一个可重复使用的代码块,接受参数并返回值。 CREATE FUNCTION的基本语法如下: CREATE FUNCTION 函数名 ([参数列表]) RETURNS 返回值类型 BEGIN -- 函数体代码 END; 其中,函数名是自定义函数的名称,参数列表是函数接收的输入参数,返回值类型是函数的返回值的数据类型。 函数体代码中包含了函数的具体逻辑,可以使用SQL语句和其他的函数,对输入参数进行处理,然后返回结果。 例如,我们可以创建一个函数用于计算两个数相加的结果,并返回其总和。示例如下: CREATE FUNCTION AddNumbers (num1 INT, num2 INT) RETURNS INT BEGIN DECLARE result INT; SET result = num1 + num2; RETURN result; END; 上述函数的名称是“AddNumbers”,接受两个整数类型的参数“num1”和“num2”,并返回一个整数类型的结果。 函数体代码中,我们首先声明了一个变量“result”,并将“num1”和“num2”的值相加后赋给“result”。最后,我们使用RETURN语句返回了计算的结果。 这样,当我们调用这个函数时,就可以传递两个整数值,并得到它们的总和作为返回值。 总之,SQLCREATE FUNCTION语句用于创建自定义函数,可以根据需求定义参数和返回值,并在函数体代码中编写具体的逻辑。函数可以在需要时重复使用,提高SQL的复用性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值