2016-03-25 2 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' как 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.

Смежные вопросы