我对我创建的更新函数有疑问...
CREATE OR REPLACE FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar)
RETURNS character AS
$BODY$
DECLARE
loc_result CHAR(50);
BEGIN
UPDATE rm_category
SET
raw_mat_cat_code = iraw_mat_cat_code,
raw_mat_cat_desc = iraw_mat_cat_desc
WHERE company = icompany;
loc_result = 'success';
RETURN loc_result ;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar) OWNER TO postgres;
好吧,如果我输入一条不存在的记录,例如 9,它会返回成功,即使我知道它没有更新任何内容!
如果 SQL 正在更新一个不存在的行,它不会抛出错误吗??
谢谢
最佳答案
这取决于 DBMS - 但不,它不应该抛出错误。根据 SQL 标准(现在是 ISO/IEC 9075:2008),它应该设置 SQLNOTFOUND 条件(+100),它与任何错误条件分开。 (对于 Informix,如果您使用 MODE ANSI 数据库,您将获得 SQLNOTFOUND;如果您使用非 ANSI 数据库,您将获得 0(无错误)作为条件。原因早于原始 SQL-86 标准。 )
请注意,SQL 是一种基于集合的语言。您要求的是语句更新一组(匹配)行——更新包含零(匹配)行的集合是完全有效的。
关于function - PostgreSQL 中的更新函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301234/