ITPub博客

首页 > 数据库 > > GAUSSDB T 存储过程(4)

GAUSSDB T 存储过程(4)

作者:GaussDB_数据库 时间:2020-03-09 14:31:19 0 删除 编辑

功能描述

执行存储过程。

注意事项

  • 自定义存储过程和系统函数重名时,数据库会优先调用系统函数。如果需要优先调用重名的自定义存储过程,则需要将该自定义存储过程配置在$GSDB_DATA/cfg/udf.ini中,格式为user_name.procedure_name,配置完成后,需要重启数据库,配置才会生效。

  • udf.ini文件的权限应设置为只有数据库用户组dbgrp中的用户有权限修改,权限为600。

  • 执行存储过程时,可以指定参数列表中所有参数的值,也可以使用“=>”指定部分参数的值。指定部分参数值时,如果存在既没有缺省值也没有指定值的参数会报错。

  • 执行存储过程时,不允许使用常量对IN OUT类型和OUT类型的输入参数赋值。

  • 执行存储过程时,建议用户发现行号报错的时候查看PROC$视图来对应行号。

  • 执行不带参数的存储过程(包括自定义函数),可以直接给定存储过程名或自定义函数名,不需要带括号。

  • 执行存储过程时,可以用分号“;”作为结束符,或者直接换行使用“/”作为结束符;但不能两个结束符一起使用,如果一起使用会报错。

语法格式

{ CALL | EXEC } [schema_name.]procedure_name[(param[,...])];

参数说明

  • CALL

    执行存储过程指令。

  • EXEC

    执行存储过程指令。

  • schema_name

    存储过程所有者。

  • procedure_name

    存储过程名称。

  • param

    存储过程参数,如果编译的存储过程不带参数,执行时可以不加括号。

示例

  • 使用不带参数的存储过程。

    --为存储过程案例准备基础表。
    --删除重名的临时表。
    DROP TABLE IF EXISTS table_temp;
    --创建临时表。
    CREATE TABLE table_temp(f1 INT, f2 VARCHAR2(20));

    存储过程和函数存储在同一个系统表中,如果新创建的存储过程和已有自定义函数重名,将导致创建存储过程失败。因此,在创建存储过程之前,需要删除重名的自定义函数。

    --删除重名的自定义函数。
    DROP FUNCTION IF EXISTS p_no_param;
    --删除重名的存储过程。
    DROP PROCEDURE IF EXISTS p_no_param;

    创建存储过程时,最后的“/”符号用于标示存储过程定义语句的结束,不能省略,且必须单独成行。

    --创建一个不带参数的存储过程。
    CREATE OR REPLACE PROCEDURE p_no_param IS
    BEGIN
    INSERT INTO table_temp VALUES(1,'xxx');
    COMMIT;
    END;
    /
    --使用CALL执行存储过程。
    CALL p_no_param;
    --使用EXEC执行存储过程。
    EXEC p_no_param;
    --检查临时表数据。
    SELECT * FROM table_temp;

    F1 F2
    ------------ --------------------
    1 xxx
    1 xxx

    2 rows fetched.
    --删除存储过程。
    DROP PROCEDURE p_no_param;
  • 使用带参数的存储过程。

    --为存储过程案例准备基础表。
    --删除重名的临时表。
    DROP TABLE IF EXISTS table_temp;
    --创建临时表。
    CREATE TABLE table_temp(f1 INT, f2 INT, f3 VARCHAR2(20));

    存储过程和函数存储在同一个系统表中,如果新创建的存储过程和已有自定义函数重名,将导致创建存储过程失败。因此,在创建存储过程之前,需要删除重名的自定义函数。

    --删除重名的自定义函数。
    DROP FUNCTION IF EXISTS p_with_param;
    --删除重名的存储过程
    DROP PROCEDURE IF EXISTS p_with_param;

    创建存储过程时,最后的“/”符号用于标示存储过程定义语句的结束,不能省略,且必须单独成行。

    --创建存储过程,第一个参数和第二个参数均有默认值,第三个参数没有默认值。
    CREATE OR REPLACE PROCEDURE p_with_param(param1 INT := , param2 INT DEFAULT ,param3 VARCHAR2) IS
    BEGIN
    INSERT INTO table_temp VALUES(param1,param2,param3);
    COMMIT;
    END;
    /
    --执行存储过程时指定全部输入参数的值。
    --使用CALL执行存储过程。
    CALL p_with_param(1,1,'xxx');
    --使用EXEC执行存储过程。
    EXEC p_with_param(1,1,'xxxx');

    指定部分参数的值时,需要为所有没有默认值的参数指定值。如果一个参数既没有默认值,也没有指定值,则会返回错误。

    --执行存储过程时,只为没有默认值的参数指定值。
    --使用CALL执行存储过程。
    CALL p_with_param(param3=>'yyy');
    --使用EXEC执行存储过程。
    EXEC p_with_param(param3=>'yyyy');
    --查询临时表数据。
    SELECT * FROM table_temp;

    F1 F2 F3
    ------------ ------------ --------------------
    1 1 xxx
    1 1 xxxx
    0 yyy
    0 yyyy

    4 rows fetched.
    --删除存储过程。
    DROP PROCEDURE p_with_param;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3170083/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19243