函数根据参数从两个查询之一返回记录集

时间:2015-07-06 06:43:02

标签: postgresql stored-procedures plpgsql

我在这个功能中遇到了问题:

create function fruit(proses varchar)
returns table("FRUIT" varchar, "ID" integer, "FRUITCOLOR" varchar) as
            -- i think i miss something in this part
$$
begin
  if proses = 'view1' then
    select fruit, id from table;
  elseif proses = 'view2' then
    select fruit, id, fruitcolor from table
  end if;
end; $$ language plpgsql;

我想使用两个SELECT查询中的一个,但它不起作用,我认为错误在returns table,但我不知道究竟在哪里。

1 个答案:

答案 0 :(得分:1)

您希望通过函数从表中返回一组行。您的代码大部分都是正确的,但您忘记了函数中的RETURN QUERY

create function fruit(proses varchar)
returns table("FRUIT" varchar, "ID" integer, "FRUITCOLOR" varchar) as $$
begin
  if proses = 'view1' then
    RETURN QUERY select fruit, id, NULL from table;
  elseif proses = 'view2' then
    RETURN QUERY select fruit, id, fruitcolor from table;
  end if;
  RETURN;
end; $$ language plpgsql;

请注意,您只能返回单个"类型"来自任何给定的函数,所以如果proses = 'view1',您应该返回NULL作为第三列。

您现在可以像使用任何其他表或视图一样使用您的函数:

SELECT id, fruit FROM fruit('view1');