2014-06-10 121 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?請看我的更新。 –

相關問題