请解释为什么我得到:
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'
这是因为您将函数定义为STRICT
(与RETURNS NULL ON NULL INPUT
相同(。由于其中一个参数是 NULL,因此甚至不会调用该函数,并且返回 NULL。
如果您不想这样,请运行
ALTER FUNCTION reducer(varchar, varchar)
CALLED ON NULL INPUT;