PostgreSQL使用null参数调用函数

时间:2016-01-20 20:53:39

标签: 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;

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

select MyTable_UPDATE(9, 'testing 123');

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

select MyTable_UPDATE(9, null);

如果我运行更新查询来设置description = null,它可以工作:

UPDATE mytable SET
   Description = null 
WHERE ID = 9;

2 个答案:

答案 0 :(得分:3)

From postgresql documentation on CREATE FUNCTION

  

严格

     

RETURNS NULL ON NULL INPUT或STRICT表示该函数   每当任何参数为null时,它总是返回null。如果这   指定参数,有时不执行该功能   null参数;而是自动假设空结果。

简而言之,该功能未被执行。

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

答案 1 :(得分:0)

如果提供了null以允许可选参数,您还可以将函数更新为默认值。

CREATE OR REPLACE FUNCTION MyTable_UPDATE 
(
   _ID int,
   _Description text default null
) 
...