我有以下功能:
CREATE OR REPLACE FUNCTION public.get_string(cmd_type text, udf_name text,
group_name character varying DEFAULT 'usage'::character varying)
RETURNS text
LANGUAGE plpgsql
AS $function$
BEGIN
return 'This is the string: '''|| group_name ||''''::text;
END;
$function$
当我这样称呼时:
select public.get_string('test', 'myudf!', group_name=>null::character varying);
返回NULL。
我希望它至少会回归:
This is the string: ''
然而,当我这样称呼时:
select public.get_string('test', 'myudf!');
我得到了预期的结果:
This is the string: 'usage'
为什么将NULL传递给可选参数会使整个字符串为空?
答案 0 :(得分:0)
它不是神秘的 - 任何超过NULL值的操作都会再次为NULL。
postgres=# select ('Hello' || null) is null ;
┌──────────┐
│ ?column? │
╞══════════╡
│ t │
└──────────┘
(1 row)
您应该使用coalesce
函数并针对NULL值清理表达式。
postgres=# select ('Hello' || coalesce(null,'')) ;
┌──────────┐
│ ?column? │
╞══════════╡
│ Hello │
└──────────┘
(1 row)
也许你知道一个Oracle数据库,其中NULL和空字符串相等。但它仅适用于Oracle,其他地方NULL为NULL且更具侵略性。