2016-09-27 42 views
0

是否有可能創建一個返回一組記錄的函數,但其​​中一個字段可以是int或bool取決於condiotion?PostgreSql:函數返回記錄,其中一個字段可能是int或bool

事情是這樣的:

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

我試圖模擬的SQL Server sqlvariant類型的行爲

+0

無,每一列必須有一個明確定義的類型。如果你願意,你可以將bool轉換爲一個int值,然後將其轉換爲0或1. – redneb

+0

我需要更多的類型,例如int,bool,text,timestamp等。 – Oleg

+0

也許你可以將它們轉換爲文本然後。 – redneb

回答

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 
相關問題