学习目标
学习openGauss定义存储过程和函数
课程学习
连接数据库
su - omm
gsql -r

课程作业
1.创建带有入参和出参的函数1,调用函数时使用按参数值传递和命名标记法传参
CREATE FUNCTION anson_func_sum(num1 IN integer, num2 IN integer, res OUT integer)
RETURN integer
AS
BEGIN
res := num1 + num2;
END;
/
CALL anson_func_sum(1, 3,0);
CALL anson_func_sum(num2 := 2, num1 := 3,res :=0);

2.创建返回类型为record的函数2,重命名函数2
CREATE OR REPLACE FUNCTION anson_func_res2(i int, out result_1 bigint, out result_2 bigint)
returns SETOF RECORD
as $$
begin
result_1 = i + 1;
result_2 = i * 20;
return next;
end;
$$language plpgsql;
call anson_func_res2(1, 0, 0);
alter function anson_func_res2(in int,out bigint,out bigint) rename to anson_func_res20;

3.使用\sf和系统函数查看函数定义
\sf anson_func_res20
select * from from pg_proc where proname = 'anson_func_res20';


4.删除函数
drop function anson_func_sum;
drop function anson_func_res20;

写在最后
15天的课程又结束了,学习的是openGauss存储过程和函数,与ORACLE的存储过程和函数类似,查了官方的说明注意事项,放置于最下面,总之操作非常之方便,\ 加相应命令的操作,让人非常舒适,期待继续学习,更加了解openGauss数据库,同时知悉各数据库的异同之处,能顺畅的使用openGauss数据库。
注意事项
如果创建函数时参数或返回值带有精度,不进行精度检测。
创建函数时,函数定义中对表对象的操作建议都显式指定模式,否则可能会导致函数执行异常。
在创建函数时,函数内部通过SET语句设置current_schema和search_path无效。执行完函数search_path和current_schema与执行函数前的search_path和current_schema保持一致。
如果函数参数中带有出参,SELECT调用函数必须缺省出参,CALL调用函数必须指定出参,对于调用重载的带有PACKAGE属性的函数,CALL调用函数可以缺省出参,具体信息参见CALL的示例。
兼容Postgresql风格的函数或者带有PACKAGE属性的函数支持重载。在指定REPLACE的时候,如果参数个数、类型、返回值有变化,不会替换原有函数,而是会建立新的函数。
SELECT调用可以指定不同参数来进行同名函数调用。由于语法不支持调用不带有PACKAGE属性的同名函数。
在创建function时,不能在avg函数外面嵌套其他agg函数或者其他系统函数。
新创建的函数默认会给PUBLIC授予执行权限(详见GRANT)。用户可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限。
在函数内部调用其它无参数的函数时,可以省略括号,直接使用函数名进行调用。
兼容Oracle风格的函数支持参数注释的查看与导出、导入。
兼容Oracle风格的函数支持介于IS/AS与plsql_body之间的注释的查看与导出、导入。




