我需要检查更新或插入会影响多少行(实际上,目前只更新)。我创建了以下函数:
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();
答案 0 :(得分:1)
当调用function / trigger时,会创建新的内部执行状态结构(PLpgSQL_execstate),并将ROW_COUNT值(eval_processed属性)设置为0.因此,在函数内部,只能为同一函数内的语句获取ROW_COUNT。作为一种解决方法,您可以将sql语句作为text参数传递给此过程并在其中执行。