我对我创建的更新功能有疑问......
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不会抛出错误吗?
由于
答案 0 :(得分:1)
您可以使用“FOUND”来检测最后一个语句是否影响了一行或多行,请参阅Manual。
示例:
-- snippet
IF FOUND THEN
loc_result = 'success';
ELSE
loc_result = 'failed'; -- or something similiar...
END IF;
答案 1 :(得分:0)
这取决于DBMS - 但不是,它不应该抛出错误。根据SQL标准(ISO / IEC 9075:2008,最近),它应该设置SQLNOTFOUND条件(+100),它与任何错误条件分开。 (使用Informix,如果使用MODE ANSI数据库,则会获得SQLNOTFOUND;如果使用非ANSI数据库,则会得到0(无错误)作为条件。原因是SQL-86原始标准之前的原因。 )
请注意,SQL是一种基于集合的语言。您请求的是该语句更新了一组(匹配)行 - 更新包含零(匹配)行的集合是完全有效的。