function - PostgreSQL 中的更新函数

标签 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_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/

相关文章:

python - 是不是约定俗成的说函数被调用,方法被调用?

sql - 奇怪的 pgsql 查询性能

sql - PostgreSQL:如何将两列相乘并在同一查询中显示结果?

javascript - 带函数的 for 循环

performance - 矩阵与矩阵运算的函数

c - 动态字符串数组: allocation in external function

sql - 向现有 PostgreSQL 索引添加唯一约束

mysql - 存储过程中的案例语句 - 未知系统变量

sql-server - 使用聚合函数的 SQL 更新查询

MYSQL从另一个具有多个条目的表更新