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

Function returning set of records from one of two queries depending on argument

我在这个函数中遇到了问题:

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 但我不知道确切的位置。

您似乎想通过一个函数 return 来自 table 的一组行。您的代码大部分是正确的,但是您忘记了从函数 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;

请注意,您只能从任何给定函数中 return 一个 "type",因此在 proses = 'view1' 的情况下,您应该 return NULL 作为第三列。

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

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