Function PostgreSQL中的更新函数

Function PostgreSQL中的更新函数,function,postgresql,sql-update,Function,Postgresql,Sql Update,我有一个关于我创建的更新函数的问题 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_c

我有一个关于我创建的更新函数的问题

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中,如果使用模式ANSI数据库,则会得到SQLNOTFOUND;如果使用非ANSI数据库,则会得到0(无错误)作为条件。其原因早于原始SQL-86标准。)


请注意,SQL是一种基于集合的语言。您要求的是语句更新一组(匹配的)行,而更新一组包含零行(匹配的)行是完全有效的。

这取决于DBMS,但不,它不应该抛出错误。根据SQL标准(现在的ISO/IEC 9075:2008),它应该设置SQLNOTFOUND条件(+100),这与任何错误条件都是分开的。(在Informix中,如果使用模式ANSI数据库,则会得到SQLNOTFOUND;如果使用非ANSI数据库,则会得到0(无错误)作为条件。其原因早于原始SQL-86标准。)

请注意,SQL是一种基于集合的语言。您要求的是语句更新一组(匹配的)行,而更新一组包含零行(匹配的)行是完全有效的。

您可以使用“find”来检测上一条语句是否影响一行或多行,请参阅

例如:

-- snippet
IF FOUND THEN
  loc_result = 'success';
ELSE
  loc_result = 'failed'; -- or something similiar...
END IF;
您可以使用“find”来检测最后一条语句是否影响了一行或多行,请参阅

例如:

-- snippet
IF FOUND THEN
  loc_result = 'success';
ELSE
  loc_result = 'failed'; -- or something similiar...
END IF;