我对我创建的更新功能有疑问......

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是一种基于集合的语言。您请求的是该语句更新了一组(匹配)行 - 更新包含零(匹配)行的集合是完全有效的。

其他提示

您可以使用<!>“; FOUND <!>”;检测最后一个语句是否影响了一行或多行,参见手动

示例:

-- snippet
IF FOUND THEN
  loc_result = 'success';
ELSE
  loc_result = 'failed'; -- or something similiar...
END IF;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top