存储过程

商业规则和业务逻辑可以通过程序存储在openGauss中,这个程序就是存储过程。

存储过程是SQL和PL/SQL的组合。存储过程使执行商业规则的代码可以从应用程序中移动到数据库。从而,代码存储一次能够被多个程序使用。。用户可以进行反复调用,从而减少SQL语句的重复编写数量,提高工作效率。

语法格式

  • 创建存储过程

    1. CREATE PROCEDURE procedure_name
    2. [ ( {[ argname ] [ argmode ] argtype [ = expression ]}[,...]) ]
    3. { IS | AS }
    4. BRGIN
    5. procedure_body
    6. END
    7. /

更多存储过程的创建及调用办法请参考CREATE PROCEDURE

  • 调用存储过程

    1. CALL procedure_name ( param_expr );
  • 删除存储过程

    1. DROP PROCEDURE procedure_name ;

参数说明

  • procedure_name

    创建的存储过程名称。

  • argname

    参数的名称。

  • argmode

    参数的模式。取值范围: IN,OUT,INOUT或VARIADIC。VARIADIC用于声明数组类型的参数。缺省值是IN。

    • IN

      输入参数。表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回。

    • OUT

      输出参数。该值可在存储过程内部被改变,并可返回

    • INOUT

      输入输出参数。调用时指定,并且可被改变和返回

  • argtype

    参数的数据类型。

  • expression

    设定缺省值。

  • IS、AS

    语法格式要求,必须写其中一个。两个相同。

  • BRGIN、END

    语法格式要求,必须写。

  • procedure_body

    存储过程内容。

  • param_expr

    参数列表。参数间用符号“,”隔开;参数名和参数值用符号 “:=”或者“=>”隔开。

示例

  1. --创建表格
  2. openGauss=# CREATE TABLE graderecord
  3. (
  4. number INTEGER,
  5. name CHAR(20),
  6. class CHAR(20),
  7. grade INTEGER
  8. );
  9. --定义存储过程
  10. openGauss=# CREATE PROCEDURE insert_data (param1 INT = 0, param2 CHAR(20),param3 CHAR(20),param4 INT = 0 )
  11. IS
  12. BEGIN
  13. INSERT INTO graderecord VALUES(param1,param2,param3,param4);
  14. END;
  15. /
  16. --调用存储过程
  17. openGauss=# CALL insert_data(param1:=210101,param2:='Alan',param3:='21.01',param4:=92);
  18. --删除存储过程
  19. openGauss=# DROP PROCEDURE insert_data;

PL/pgSQL语言函数节所提到的PL/pgSQL语言创建的函数与存储过程的应用方法相通。下面各节中,除非特别声明,否则内容通用于存储过程和PL/pgSQL语言函数。