2016-08-10 4 views
1

私は関数を作成しました。私は戻り値voidを定義しました。しかし、影響を受けた行数を表示したい。どのようにできるのか?Postgresql関数は影響を受けた行数を返します

CREATE OR REPLACE FUNCTION update() RETURNS void AS 
$BODY$ 
BEGIN 
    update test_a set name='cde' where name='abc'; 
    update test_b set name='mno' where name='klm'; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
ALTER FUNCTION update() 
OWNER TO postgres; 

答えて

4

これはPLpgSQL関数なので、GET DIAGNOSTICSを調べる必要があります。また、UPDATE/INSERTSのPostgres SQL拡張RETURNING *が便利かもしれません。

CREATE OR REPLACE FUNCTION update() RETURNS void AS 
$BODY$ 
DECLARE 
    a_count integer; 
    b_count integer; 
BEGIN 
    update test_a set name='cde' where name='abc'; 
    GET DIAGNOSTICS a_count = ROW_COUNT; 
    update test_b set name='mno' where name='klm'; 
    GET DIAGNOSTICS b_count = ROW_COUNT; 

    RAISE NOTICE 'The rows affected by A=% and B=%', a_count, b_count ; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
ALTER FUNCTION update() 
OWNER TO postgres; 

達成したいことに応じて、特殊なブール変数「FOUND」を使用できます。 UPDATE、INSERT、およびDELETE文が設定されています。少なくとも1つの行に影響がある場合はtrue、影響を受ける行がない場合はfalseです。

+0

ありがとう –

関連する問題