我正在尝试在PL / pgSQL函数中实现一些业务逻辑。
我已经破解了一些伪代码,这些伪代码解释了我想要包含在函数中的业务逻辑类型。
注意:此函数返回一个表,因此我可以在以下查询中使用它:
SELECT A.col1,B.col1 FROM(SELECT * from some_table_returning_func(1,1,2,3)为A),tbl2为B;
pl / PgSQL函数的伪代码如下:
CREATE FUNCTION some_table_returning_func(uid int, type_id int, filter_type_id int, filter_id int) RETURNS TABLE AS $$
DECLARE
where_clause text := 'tbl1.id = ' + uid;
ret TABLE;
BEGIN
switch (filter_type_id)
{
case 1:
switch (filter_id)
{
case 1:
where_clause += ' AND tbl1.item_id = tbl2.id AND tbl2.type_id = filter_id';
break;
//other cases follow ...
}
break;
//other cases follow ...
}
// where clause has been built, now run query based on the type
ret = SELECT [COL1, ... COLN] WHERE where_clause;
IF (type_id <> 1) THEN
return ret;
ELSE
return select * from another_table_returning_func(ret,123);
ENDIF;
END;
$$ LANGUAGE plpgsql;
我有以下问题:
如何正确编写函数(即使用生成的WHERE子句执行查询,并返回表
如何编写接受表和整数的PL / pgSQL函数并返回表(another_table_returning_func)?
答案 0 :(得分:1)
1。)您可以使用SET OF子句返回类似于表的结果:RETURNS SETOF表名