函数返回SELECT语句中使用的表

时间:2015-12-21 11:27:28

标签: postgresql

我有一个函数返回一个表,定义如下:

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返回的那样?

1 个答案:

答案 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)
相关问题