具有null参数的Postgres SQL函数在简单情况下/在其他情况下会产生null

时间:2019-06-11 14:48:26

标签: postgresql

请解释为什么我得到

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'

1 个答案:

答案 0 :(得分:6)

这是因为您将函数定义为STRICT(与RETURNS NULL ON NULL INPUT相同)。由于参数之一为NULL,因此甚至不调用该函数,并且返回NULL。

如果您不想要,请运行

ALTER FUNCTION reducer(varchar, varchar)
   CALLED ON NULL INPUT;