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

人大金仓数据库KingbaseES 子程序的参数模式使用介绍

数据猿 2023-09-07
225

关键字:KingbaseES、参数模式、子程序

一、子程序介绍

PL/SQL中的子程序是可以存储在数据库中、能在需要时被其他PL/SQL块重复调用的命名PL/SQL块。子程序能够接受参数并被调用。
本文主要介绍PL/SQL中的两类子程序:过程和函数。

其中过程的创建语法为:

\set SQLTERM /
CREATE OR REPLACE PROCEDURE procedure_name(
para1 [IN | OUT | IN OUT] data_type, ...)
    IS | AS
    ... /声明语句
BEGIN
.../执行语句
[EXCEPTION]
    .../异常处理语句
END [procedure_name];
/

函数的创建语法类似于过程,区别在于函数声明时必须指定返回值的数据类型,并在函数体内包含返回数据的return语句。其创建语法为:
\set SQLTERM /
CREATE OR REPLACE FUNCTION function_name(
para1 [IN | OUT | IN OUT] data_type, ...) RETURN return_data_type
    IS | AS
    ... /声明语句
BEGIN
.../执行语句
RETURN return_data;
[EXCEPTION]
    .../异常处理语句
END [function_name];
/

二、子程序的参数模式

子程序可以通过参数进行数据传递,包括三种传递模式:IN模式、OUT模式、IN OUT模式。未显示指定模式的情况下,默认为IN模式。下面分别介绍三种模式的使用及特点。

(1)IN模式:如下列所示,不显示指定形式参数的模式时,默认为IN模式,过程test可以接收传入的实参值。

\set SQLTERM /
CREATE OR REPLACE PROCEDURE test(v1 INTEGER, v2 IN INTEGER)
    IS
BEGIN
RAISE NOTICE ‘v1 = %’, v1;
RAISE NOTICE ‘v2 = %’, v2;
END;
/
\set SQLTERM /
BEGIN
test(1, 2);  
END;
/
/输出结果
RAISE NOTICE:v1 = 1
RAISE NOTICE:v2 = 2  --说明传入的实参值被接收了

(2)OUT模式,指定为OUT模式的形式参数,只能在子程序内部被赋值并传给实参返回,不能接收传入的实参值。如下例所示,调用过程时传入的实参v1的值1并没有被形参v接收,为NULL。同时修改后的形参v的值能够传递给实参v1返回到调用环境。

\set SQLTERM /
CREATE OR REPLACE PROCEDURE test(v OUT INTEGER)
    IS
BEGIN
RAISE NOTICE ‘before_value = %’, v;
v := 5;
END;
/
\set SQLTERM /
DECLARE
    v1 INTEGER;
BEGIN
    v1 := 1;
test(v1);  
RAISE NOTICE ‘after_value = %’, v1;  
END;
/
/输出结果
RAISE NOTICE:before_value = NULL --传入的实参值被忽略
RAISE NOTICE:after_value = 5 --形参v的值传给了实参v1并返回

(3)IN OUT模式,该模式下同时具备IN和OUT模式的特点,如下例所示,当过程的形参为IN OUT模式时,形参不仅能够接收传入的实参值,并能将修改后的值返回给实参传递到调用环境中。

\set SQLTERM /
CREATE OR REPLACE PROCEDURE test(v IN OUT INTEGER)
    IS
BEGIN
RAISE NOTICE ‘before_value =%’, v;
v := 5;
END;
/
\set SQLTERM /
DECLARE
    v1 INTEGER;
BEGIN
    v1 := 1;
test(v1);                            
RAISE NOTICE ‘after_value =%’, v1;  
END;
/
/输出结果
RAISE NOTICE:before_value = 1--传入的实参值被忽略
RAISE NOTICE:after_value = 5 --形参v的值传给了实参v1并返回

三、总结

本文主要介绍了两种类型的子程序:过程和函数。并给出了在PL/SQL中的定义语法,然后以过程为例,介绍了子程序的三种不同参数模式如何与外部环境进行参数传递。通过学习PL/SQL子程序的参数模式,能够加深对PL/SQL子程序的使用。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论