云数据库 GaussDB-CREATE PROCEDURE:注意事项

时间:2023-11-01 16:22:10

注意事项

  • 如果创建存储过程时参数或返回值带有精度,不进行精度检测。
  • 创建存储过程时,存储过程定义中对表对象的操作建议都显示指定模式,否则可能会导致存储过程执行异常。
  • 在创建存储过程时,存储过程内部通过SET语句设置current_schema和search_path无效。执行完函数search_path和current_schema与执行函数前的search_path和current_schema保持一致。
  • 如果存储过程参数中带有出参,SELECT调用存储过程必须缺省出参,CALL调用存储过程调用非重载函数时必须指定出参,对于重载的package函数,out参数可以缺省,具体信息参见CALL的示例。
  • 存储过程指定package属性时支持重载。
  • 在创建procedure时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。
  • 在存储过程内部调用其它无参数的存储过程时,可以省略括号,直接使用存储过程名进行调用。
  • 在存储过程内部调用其他有出参的函数,如果在赋值表达式中调用时,被调函数的出参可以省略,给出了也会被忽略。
  • 存储过程支持参数注释的查看与导出、导入。
  • 存储过程支持介于IS/AS与plsql_body之间的注释的查看与导出、导入。
  • 存储过程默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置guc参数behavior_compat_options='plsql_security_definer',如果对定义者权限不了解,请参考《安全加固指南》-中“权限控制”章节。
  • 被授予CREATE ANY FUNCTION权限的用户,可以在用户模式下创建/替换存储过程。
  • out/inout参数必须传入变量,不能够传入常量。
  • 集中式环境下,想要调用in参数相同,out参数不同的存储过程,需要设置guc参数behavior_compat_options='proc_outparam_override',并且打开参数后,无论使用select还是call调用存储过程,都必须加上out参数。打开参数后,不支持使用perform调用存储过程或函数。
support.huaweicloud.com/centralized-devg-v2-opengauss/devg_03_0561.html