2016-03-25 77 views
3

是否可以定義一個在Postgresql中使用泛型類型參數的函數?因此,舉例來說,如果我想定義一個函數,其中的參數可以是數字或字符改變:如何爲函數參數指定通用類型

CREATE OR REPLACE FUNCTION toStr(col ??Generic Type??) 
    RETURNS character varying AS 
$BODY$ 
select 
case when pg_typeof(col) = 'character varying'::regtype then col::'character varying' 
case when pg_typeof(col) = 'numeric'::regtype then to_char(col::numeric, '999') 
    else 'Unsupported type' 
$BODY$ 

所以,如果這是可能的會是什麼?我的泛型類型?是?

+1

'anyelement' as type。 – Abelisto

回答

5

您可以使用接受任何數據類型的anyelementpseudo type;

CREATE OR REPLACE FUNCTION toStr(col anyelement) 
    RETURNS character varying 
AS $$ 
select 
case when pg_typeof(col) = 'character varying'::regtype then (col::character varying) 
    when pg_typeof(col) = 'numeric'::regtype then to_char(col::numeric, '999') 
    else 'Unsupported type' end 
$$ 
LANGUAGE sql; 

An SQLfiddle showing it in action

相關問題