我有一个简单的函数来更新表中的列。我想返回布尔值来指示更新是否成功。
这是功能:
CREATE OR REPLACE FUNCTION api.file_confirm_upload_to_s3(_file_guid uuid )
RETURNS bool AS
$BODY$
UPDATE main.file
SET is_uploaded_to_s3 = true
WHERE guid = _file_guid
RETURNING CASE WHEN guid IS NULL THEN false ELSE true END
$BODY$
LANGUAGE SQL
VOLATILE
SECURITY DEFINER;
成功更新后,函数返回 TRUE ,但在更新失败后返回 NULL 。 Null是假的,所以它对我有用,但我想知道如何才能解决这个问题。
不成功的更新返回一个空数据集,产生NULL,因此返回值。如何测试空的与非空的数据集而不是检查 guid 字段的值?
JGH答案后编辑..
这是执行我想要的代码。我不得不切换到 plpgsql 来访问FOUND
变量。
CREATE OR REPLACE FUNCTION api.file_confirm_upload_to_s3(_file_guid uuid )
RETURNS bool AS
$BODY$
BEGIN
UPDATE main.file
SET is_uploaded_to_s3 = true
WHERE guid = _file_guid;
RETURN FOUND;
END;
$BODY$
LANGUAGE plpgsql
VOLATILE
SECURITY DEFINER;
答案 0 :(得分:3)
您也可以在SQL
模式下执行此操作
...
with c as( -- put your update into cte
UPDATE main.file
SET is_uploaded_to_s3 = true
WHERE guid = _file_guid
RETURNING guid
)
select exists(select guid from c);
...
答案 1 :(得分:2)