带有空参数的Postgres SQL函数为简单情况/时间/其他生成空



请解释为什么我得到:

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;

最新更新