带有空参数的PostgreSQL调用函数

jim*_*415 6 postgresql

我有一个更新一行的函数:

CREATE OR REPLACE FUNCTION MyTable_UPDATE 
(
   _ID int,
   _Description text
) 
RETURNS bool
AS $$
DECLARE _OK boolean;

BEGIN
   _OK := false;
   UPDATE mytable SET
      Description = _Description 
   WHERE ID = _ID;
   _OK := true;

   RETURN _OK;  
END;
$$ LANGUAGE plpgsql STRICT;
Run Code Online (Sandbox Code Playgroud)

当我用描述中的值调用它时,它可以工作:

select MyTable_UPDATE(9, 'testing 123');
Run Code Online (Sandbox Code Playgroud)

如果我用空值调用它,它不会更新,没有错误消息,也没有返回值:

select MyTable_UPDATE(9, null);
Run Code Online (Sandbox Code Playgroud)

如果我运行更新查询来设置 description = null,它会起作用:

UPDATE mytable SET
   Description = null 
WHERE ID = 9;
Run Code Online (Sandbox Code Playgroud)

Luc*_*c M 10

来自关于 CREATE FUNCTION 的 postgresql 文档

严格的

RETURNS NULL ON NULL INPUT 或 STRICT 表示只要它的任何参数为空,该函数总是返回空值。如果指定了该参数,则在有空参数时不执行该函数;相反,会自动假定为空结果。

简而言之,函数没有被执行。

您必须删除STRICT参数才能传递 NULL 值。