使用
创建 ifase 函数CREATE OR REPLACE FUNCTION public.icase(
cond1 boolean, res1 anyelement,
cond2 boolean, res2 anyelement,
conddefault anyelement)
RETURNS anyelement LANGUAGE 'sql' IMMUTABLE PARALLEL UNSAFE AS $BODY$
SELECT CASE WHEN $1 THEN $2 WHEN $3 THEN $4 ELSE $5 END;
$BODY$;
select
icase( false, 0, false, 0.,0.)
抛出错误
function icase(boolean, integer, boolean, numeric, numeric) does not exist
如何让icase接受混合整数/数字参数?
根据链接:
https://www.postgresql.org/docs/current/xfunc-sql.html#XFUNC-SQL-多态函数
另一种方法是使用多态类型的“通用”家族,这允许系统尝试识别合适的通用类型。
所以:
CREATE OR REPLACE FUNCTION public.icase(cond1 boolean, res1 anycompatible, cond2 boolean, res2 anycompatible, conddefault anycompatible)
RETURNS anycompatible
LANGUAGE sql
IMMUTABLE
AS $function$
SELECT CASE WHEN $1 THEN $2 WHEN $3 THEN $4 ELSE $5 END;
$function$
;
运行时会:
select icase(false, 0, false, 0.,0.);
icase
-------
0
select icase(false, 0, false, 0.,0.0);
icase
-------
0.0