PostgreSQL存储过程(五):函数返回值

返回值介绍:

        PostgreSQL函数提供了OUT关键字和RETURNS两种语法来实现返回值的定义,其中RETURNS关键字需要在函数体中使用RETURN关键字指明返回的变量,示例脚本如下:

1. 通过OUT关键字指定返回值
-------------------
CREATE OR REPLACE FUNCTION mydb.mysc.add(IN p_a integer,IN p_b integer,OUT p_sum integer)AS $BODY$ BEGINp_sum:= p_a + p_b;  -- 进行加法运算,并将计算结果赋值给输出的参数p_sumEND;$BODY$ LANGUAGE 'plpgsql'			-- 指定函数的程序语言VOLATILE					-- 优化器不进行优化RETURNS NULL ON NULL INPUT; -- 当传入参数含有null时返回null2. 通过RETURNS关键字指定返回值
-------------------
CREATE OR REPLACE FUNCTION mydb.mysc.add(IN p_a integer,IN p_b integer)
RETURNS integer  AS $BODY$ DECLARE p_sum integer;BEGINp_sum:= p_a + p_b;  -- 进行加法运算,并将计算结果赋值给输出的参数p_sumRETURN p_sum;       -- 需要指明返回的变量END;$BODY$ LANGUAGE 'plpgsql'			-- 指定函数的程序语言VOLATILE					-- 优化器不进行优化RETURNS NULL ON NULL INPUT; -- 当传入参数含有null时返回null

返回数据库内置数据类型:

        内置数据类型如integer、varchar、date、decimal等可以直接进行返回,脚本同上文的示例。

返回多行数据:

        需要返回多条记录时,需要使用SETOF关键字指明要返回的数据类型,示例代码如下:

1. 返回多列内置数据类型:


CREATE OR REPLACE FUNCTION mydb.mysc.get_all_data() RETURNS SETOF varchar(20) AS
$BODY$
DECLAREr varchar(20);
BEGINFOR r INSELECT cust_name FROM mydb.mysc.learn01  WHERE statistics_dt = date'2021-01-31'LOOPRETURN NEXT r;END LOOP;RETURN;
END;
$BODY$
LANGUAGE plpgsql;

执行示例:

2. 返回多行多列组合数据类型:

        需要定义返回的数据类型为数据表mydb.mysc.learn01(该表依旧使用文章三中定义的数据表)

CREATE OR REPLACE FUNCTION mydb.mysc.get_all_data1() RETURNS SETOF mydb.mysc.learn01 AS
$BODY$
DECLAREr mysc.learn01%rowtype; -- 设置r变量的字段和表learn01一致
BEGINFOR r INSELECT * FROM mydb.mysc.learn01  WHERE statistics_dt = date'2021-01-31'LOOPRETURN NEXT r; END LOOP;RETURN;
END;
$BODY$
LANGUAGE plpgsql;

执行示例:

3. 使用TABLE返回多行多列组合数据类型:

        使用TABLE返回数据和SETOF返回功能基本相同,但TABLE方式返回组合数据类型要更加灵活,可以选择需要返回的字段,示例代码如下

CREATE OR REPLACE FUNCTION mydb.mysc.get_all_data3() 
RETURNS TABLE (cust_id varchar(20),cust_name varchar(20),aum_avg decimal(16,2),age integer,gender varchar(1)) AS
$BODY$
BEGINRETURN QUERY SELECT t0.cust_id,t0.cust_name,t0.aum_avg,t0.age,t0.gender FROM mydb.mysc.learn01 t0 WHERE t0.statistics_dt = date'2021-01-31';
END;
$BODY$
LANGUAGE plpgsql;

执行示例:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部