我有以下函数根据给定的条件从不同的表中返回记录 功能。
功能: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
真是个好主意。
答案 0 :(得分:0)
您必须使用RETURNS RECORD
或RETURNS SETOF RECORD
。
但是调用者必须在调用函数时指定列列表。 PostgreSQL的规划器目前不知道如何执行函数来确定其result-columns-list,然后在知道函数的result-column-list后解析并规划查询的其余部分。
有关返回记录的信息,请参阅PostgreSQL文档章节。