2014-06-10 87 views
1

我需要检查有多少行受更新或插入影响(实际上,此时只有更新)。我创建了以下功能:获取受更新或插入影响的行数

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; 

然后我更新了一个表并调用了这个函数,结果为零。然后我插入一行并一次又一次地调用该函数,结果为零。这是怎么回事?我如何检查受更新或正确插入影响的行数?

UPDATE:

我希望这是不行的,相反,它总是返回0作为行的影响量:

SELECT rows_affected(); 

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

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

SELECT rows_affected(); 

回答

1

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

+0

古德里安?谢啦。 –

+0

是的,就是我) – Stan

+0

这是否意味着我只能在其他函数中调用ROW_COUNT?请看我的更新。 –

相关问题