【问题标题】:Update function in PostgreSQLPostgreSQL 中的更新函数
【发布时间】:2008-11-19 07:24:37
【问题描述】:

我对我创建的更新函数有疑问...

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 不会抛出错误吗??

谢谢

【问题讨论】:

    标签: function postgresql sql-update


    【解决方案1】:

    您可以使用“FOUND”来检测最后一条语句是否影响了一行或多行,请参阅Manual

    例子:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-02
        • 2021-08-01
        • 2022-12-20
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多