我有一个更新行的函数:
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;
答案 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
)
...