PostgreSQL函数传NULL至可选参数为何返回NULL而非预期字符串?
问题原因与解决方案
这是PostgreSQL字符串拼接的典型特性:当使用||操作符拼接字符串时,只要任意一个操作数是NULL,整个拼接结果就会变成NULL。
你传入group_name=>null时,函数里的拼接表达式'This is the string: '''|| group_name ||''''中,group_name为NULL,直接导致整个表达式结果变为NULL,而非你预期的包含空字符串的结果。而不传该参数时,它使用默认值'usage'(非NULL),所以拼接能正常得到预期字符串。
修复方法有两种:
方法1:用COALESCE将NULL转为空字符串
修改函数返回语句,用COALESCE包裹group_name,确保NULL被替换为空字符串:
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: '''|| COALESCE(group_name, '') ||''''::text; END; $function$
方法2:使用CONCAT函数(更简洁)
PostgreSQL的CONCAT函数会自动将NULL视为空字符串处理,用它拼接更省心:
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 CONCAT('This is the string: ''', group_name, ''''); END; $function$
此时调用select public.get_string('test', 'myudf!', group_name=>null::character varying);,就能得到你想要的This is the string: ''结果。
内容的提问来源于stack exchange,提问作者HuFlungPu
相关产品推荐
相关产品推荐

