PostgreSQL 9.5:返回动态列列表

时间:2017-01-23 04:59:00

标签: postgresql

我有以下函数根据给定的条件从不同的表中返回记录 功能。

功能udf_dynamic_returns

CREATE OR REPLACE FUNCTION udf_dynamic_returns
(
    condition_name varchar(10)
)
RETURNS ????

AS

$BODY$

BEGIN

    IF condition_name = 'A' 
    THEN

        SELECT col1,col2,col3
        FROM Test

    ELSE IF condition_name = 'B' 
    THEN

        SELECT col21col22,col23,col24,col25
        FROM Kon

    ELSE IF condition_name = 'C' 
    THEN

        SELECT col31,col32
        FROM Mat

    ELSE IF condition_name = 'D' 
    THEN

        SELECT col4,col5,col6,col7,col8,col9
        FROM Test
    ......
    ......

    END IF

END;

$BODY$

LANGUAGE PLPGSQL;

注意:我有很多条件要在函数中检查。

通过搜索,我了解了Polymorphic Types。但我认为创建这么多Composite types真是个好主意。

1 个答案:

答案 0 :(得分:0)

您必须使用RETURNS RECORDRETURNS SETOF RECORD

但是调用者必须在调用函数时指定列列表。 PostgreSQL的规划器目前不知道如何执行函数来确定其result-columns-list,然后在知道函数的result-column-list后解析并规划查询的其余部分。

有关返回记录的信息,请参阅PostgreSQL文档章节。