暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 存储过程 示例

墨天轮 2019-10-12
437

示例

此示例将演示使用存储过程的整个流程,包括创建、调用和删除存储过程。

示例语句

  • 使用不带参数的存储过程。
    --为存储过程案例准备基础表。 --删除重名的临时表。 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;
  • 使用带IN模式参数的存储过程。
    --为存储过程案例准备基础表。 --删除重名的临时表。 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;

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

    --创建存储过程,第一个参数和第二个参数均有默认值0,第三个参数没有默认值。 CREATE OR REPLACE PROCEDURE p_with_param(param1 INT := 0, param2 INT DEFAULT 0,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 0 yyy 0 0 yyyy 4 rows fetched.
    --删除存储过程。 DROP PROCEDURE p_with_param;
  • 使用out,in out模式参数的存储过程。
    --删除重名的自定义函数。 DROP FUNCTION IF EXISTS p_with_outParam;
    --删除重名的存储过程。 DROP PROCEDURE IF EXISTS p_with_outParam;
    --创建存储过程p_with_outParam。 CREATE OR REPLACE PROCEDURE p_with_outParam(param1 IN INT , param2 OUT INT ,param3 IN OUT VARCHAR ) IS BEGIN param2 :=3; param3 :='xxx'; DBMS_OUTPUT.PUT_LINE('input variable: '||param1); DBMS_OUTPUT.PUT_LINE('out variable: '||param2); DBMS_OUTPUT.PUT_LINE('in out variable: '||param3); COMMIT; END; /

    使用DBMS_OUTPUT.PUT_LINE函数输出日志时,需设置serveroutput参数值为on。该参数默认为off。

    SET serveroutput ON
    --调用存储过程p_with_outParam。 Declare param1 int :=1; param2 int :=1; param3 varchar(100) :='YYY'; begin p_with_outParam(param1, param2, param3); DBMS_OUTPUT.PUT_LINE(param1); DBMS_OUTPUT.PUT_LINE(param2); DBMS_OUTPUT.PUT_LINE(param3); end; /
    --删除存储过程p_with_outParam。 DROP PROCEDURE IF EXISTS p_with_outParam;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论