postgres 输出数据集的自定义函数

定义一个可输出数据集自定义函数有多种方法

1,先定义结构,再使用结构输出结果

CREATE TYPE compfoo AS (f1 int, f2 text);

CREATE FUNCTION getfoo() RETURNS SETOF compfoo AS $$
    SELECT fooid, fooname FROM foo
$$ LANGUAGE SQL;

2,直接在return中定义表结构

CREATE FUNCTION sum_n_product_with_tab (x int)
RETURNS TABLE(sum int, product int) AS $$
    SELECT $1 + tab.y, $1 * tab.y FROM tab;
$$ LANGUAGE SQL;

3,return定义为record,在定义输出参数

CREATE FUNCTION sum_n_product_with_tab (x int, OUT sum int, OUT product int)
RETURNS SETOF record
AS $$
    SELECT $1 + tab.y, $1 * tab.y FROM tab;
$$ LANGUAGE SQL;

主要为以上三种基础情况,再说下基于以上的高频的写法。

基于逻辑需要,表结构需要拼接字符串,这时函数内的数据集是使用 execute 获取的,直接使用execute runsql;  是不能通过调用函数获取最后的结果的。可以这么玩。

CREATE TYPE compfoo AS (f1 int, f2 text);

create function func1(x int4) 
returns setof compfoo as $BODY$
declare row_index compfoo ;
declare runstr text;
.....
begin

....

for row_index in execute runstr loop
return next row_index;
end loop;

end
$BODY$

来解读下,先定义输出结构。在函数内使用 for in 循环输出结果。这样才能将通过调用函数返回结果。

注:变量 row_index 需要在 declare 声明变量时定义,不然会报“ for  附近有异常”的错误。

转载注明出处:https://www.cnblogs.com/jackicalSong/

以下截图为以上逻辑写出的来的。。

方便他人,成就自己!

原文地址:https://www.cnblogs.com/jackicalSong/p/9852008.html