Postgresql INSERT命令后从SQL函数返回布尔值
我有一个简单的函数来更新表中的列。我想返回布尔值以指示更新是否成功 以下是函数:Postgresql INSERT命令后从SQL函数返回布尔值,postgresql,Postgresql,我有一个简单的函数来更新表中的列。我想返回布尔值以指示更新是否成功 以下是函数: 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
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;
只需使用
returnfound代码>
此特殊变量包含一个布尔值,指示是否使用上一个查询找到了一行或多行。
阅读文档41.5.5和示例41-2。您也可以在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);
...
非常感谢。我必须切换到plpgsql才能访问找到的变量。我用最终代码更新了我的问题,供其他人查找。谢谢。我更喜欢更干净的plpgsql解决方案。但我会记住这个把戏。