VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

ALTER FUNCTION

功能描述

在MySQL兼容模式下,函数创建成功后可以使用ALTER FUNCTION语法修改characteristic部分特性。

语法格式

ALTER FUNCTION func_name [characteristic ...]

其中characteristic语法如下:

COMMENT 'string'
 |LANGUAGE SQL
 |[NOT]DETERMINISTIC
 |{CONTAINS SQL|NO SQL|READ SQL DATA|MODIFIES SQL DATA}
 |SQL SECURITY {DEFINER|INVOKER}

参数说明

  • func_name

    创建的函数名称,可以带有模式名。

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

  • LANGUAGE SQL

    用以实现函数的语言的名称。在函数中如果使用LANGUAGE SQL用法,则在plsql_body 部分除了出现SQL语句时能正常执行以外,出现逻辑代码如变量赋值、逻辑控制、异常处理等行为时也可以正常执行。

    与[NOT] DETERMINISTIC 的顺序可以随意排列。

  • [NOT] DETERMINISTIC

    说明函数执行的结果是否正确。

    • DETERMINISTIC:表示结果确定。每次执行函数时,相同的输入会得到相同的输出。
    • NOT DETERMINISTIC:表示结果不确定,相同的输入可能得到不同的输出。
  • CONTAINS SQL

    表示函数中不包含读或写数据的语句。

  • NO SQL

    表示函数中不包含SQL语句。

  • READ SQL DATA

    表示函数中包含读数据的语句,但不包含写数据的语句。

  • MODIFIES SQL DATA

    表示函数中包含写数据的语句。

  • SQL SECURITY

    表示函数的权限。

    默认值为:SQL SECURITY DEFINER。

    • SECURITY INVOKER:表明该函数将带着调用它的用户的权限执行。该参数可省略。
    • SECURITY DEFINER:声明该函数将以创建它的用户的权限执行。

注意事项

  • characteristic特性仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。

  • ALTER 语句可用于更改存储过程的特性,并且可以指定多个更改,但是不支持更改存储过程的参数和主体代码。

  • 不支持修改DETERMINISTIC特性。

  • MySQL兼容模式下支持使用ALTER修改函数时,函数名不带参数列表。

示例

1、创建测试表并插入数据,查看表内容。

create table test1(id int,age int,name varchar2(16)); 

insert into test1 values(1,22,'小王'); 
insert into test1 values(2,23,'小张'); 
insert into test1 values(3,21,'小弓'); 
select * from test1 order by id;

结果返回如下:

 id | age | name
----+-----+------
  1 |  22 | 小王
  2 |  23 | 小张
  3 |  21 | 小弓
(3 rows)

2、创建测试函数。

create function func_test(id1 int,age1 int,name1 varchar2) return bigint 
NOT DETERMINISTIC
CONTAINS SQL
LANGUAGE SQL
AS
a1 int;
begin
insert into test1 values(id1,age1,name1);
update test1 set age=23 where id=3;
delete from test1 where id=2;
select count(*) into a1 from test1;
return a1;
end;
/

3、修改函数属性。

ALTER FUNCTION func_test 
LANGUAGE SQL 
NO SQL 
SQL SECURITY INVOKER;

结果返回如下,表示修改成功:

ALTER FUNCTION