请解释为什么我得到
select reducer('a', null);
-- null ???
何时:
CREATE or replace FUNCTION reducer(varchar, varchar)
RETURNS varchar AS
$$
SELECT case
when $1 = 'DEL' or $2 = 'DEL' then 'DEL'
when $1 = 'READ' or $2 = 'READ' then 'READ'
else 'NEW'
end;
$$ LANGUAGE 'sql' STRICT;
select reducer('a', 'b');
-- 'NEW'
答案 0 :(得分:6)
这是因为您将函数定义为STRICT
(与RETURNS NULL ON NULL INPUT
相同)。由于参数之一为NULL,因此甚至不调用该函数,并且返回NULL。
如果您不想要,请运行
ALTER FUNCTION reducer(varchar, varchar)
CALLED ON NULL INPUT;