PostgreSql:函数返回记录,其中一个字段可能是int或bool

时间:2016-09-27 15:42:26

标签: postgresql

是否可以创建一个返回记录集的函数,但其​​中一个字段可以是int或bool,具体取决于condiotion?

这样的事情:

if cond then
   return query select x,y, int
else
  return query select x,y, bool
end if;

我正在尝试模拟SQL Server sqlvariant类型

的行为

1 个答案:

答案 0 :(得分:2)

记录可以包含任何类型的列。因此,如果您声明一个函数来返回(setof)记录,它可以返回任何内容:

create or replace function f(_param int)
returns setof record as $$
begin
    if _param = 1 then
        return query select 1, true;
    else
        return query select 1, 'text';
    end if;
end;
$$ language plpgsql;

问题是必须在每次使用时声明返回列的类型:

select * 
from f(1) s (a int, b boolean);
 a | b 
---+---
 1 | t