获取受更新或插入影响的行数

时间:2014-06-10 06:44:17

标签: sql postgresql postgresql-9.2

我需要检查更新或插入会影响多少行(实际上,目前只更新)。我创建了以下函数:

CREATE OR REPLACE FUNCTION rows_affected()
  RETURNS integer AS
$BODY$

DECLARE
    x INTEGER := -1;
BEGIN
    GET DIAGNOSTICS x = ROW_COUNT;
    RETURN x;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION rows_affected()
  OWNER TO alex1;

然后我更新了一个表并调用了这个函数,结果为零。然后我插入一行并再次调用该函数,结果为零。它有什么用?如何检查受更新影响的行数或正确插入?

更新:

这并不像我预期的那样工作,而是总是在受影响的行数量时返回0:

SELECT rows_affected();

update email set email='fdsfds' where id = 1;

insert into email(email) values('fdsfsdfdsfds');

SELECT rows_affected();

1 个答案:

答案 0 :(得分:1)

当调用function / trigger时,会创建新的内部执行状态结构(PLpgSQL_execstate),并将ROW_COUNT值(eval_processed属性)设置为0.因此,在函数内部,只能为同一函数内的语句获取ROW_COUNT。作为一种解决方法,您可以将sql语句作为text参数传递给此过程并在其中执行。