2016-01-20 122 views
1

我有更新行的函數: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); 

如果我運行一個更新查詢集描述= NULL,它的工作原理:

UPDATE mytable SET 
    Description = null 
WHERE ID = 9; 

回答

2

From postgresql documentation on CREATE FUNCTION

嚴格

返回NULL ON NULL INPUT或嚴格表示函數 始終返回null,每當它的任何參數爲空。如果指定了此參數 ,則在 爲空參數時不會執行此功能;相反,會自動假定爲空結果。

簡而言之,該功能不被執行。

您必須刪除STRICT參數才能傳遞NULL值。