如何在 icase 中允许混合整数和数字参数

问题描述 投票:0回答:1

使用

创建 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接受混合整数/数字参数?

sql postgresql plpgsql
1个回答
0
投票

根据链接:

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

© www.soinside.com 2019 - 2024. All rights reserved.