我有一个函数返回一个表,定义如下:
CREATE OR REPLACE FUNCTION my_function(IN id_in bigint) RETURNS TABLE (
out_1 bigint,
out_2 text
) AS
$$
BEGIN
-- Do something and return the appropriate result
END;
$$
LANGUAGE plpgsql;
当我做这样的事情时:
SELECT * FROM my_function(1)
按预期返回一个表。但是,我想用它来做一些更先进的事情,比如:
SELECT my_function(id) FROM some_table;
查询有效,但我在处理结果时遇到了一些麻烦。它返回一组记录,如:
(1,文本_1)
(2 1,文本2)
等
这是预期的行为,但有没有办法将这些记录“解包”到“普通”表中,就像SELECT * FROM
返回的那样?
答案 0 :(得分:1)
使用lateral join。 FROM子句中使用的函数默认是横向的:
let rec repeat(item,count) =
match count with
| 0 -> []
| n -> item :: repeat(item,n-1)
let rec rleExpand(packed, rleTag: int) =
match packed with
| [] -> []
| tag :: count :: pattern :: tail when tag = rleTag ->
let repeated = repeat(pattern,count)
let rest = rleExpand(tail,rleTag)
List.append repeated rest
| head :: tail -> head :: rleExpand(tail,rleTag)