2016-03-25 17 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'を型として指定します。 – 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です。