2012-02-19 8 views
1

を実行するのに失敗した - ここでは、次のいずれかである - 私は、最後のSQLコマンドにより影響を受けた行数を取得したい:pgAdminでは、私はpgSQLでは初心者ですので、私は賞賛異なるSQLを実行していたSQL文の

delete from "Menu" where "ID" = 0; 
GET DIAGNOSTICS integer_var = ROW_COUNT; 
select integer_var; 

が、pgAdminでは言う:私が間違ってやっている

ERROR: syntax error at or near "GET" 
LINE 1: GET DIAGNOSTICS integer_var = ROW_COUNT; 

? PostgreSQLの9.0以降で

+1

このコマンドは、pgAdminで実行する任意のステートメントだけでなく、PL/pgSQLコードのコンテキストでのみ実行できます。 –

+0

hmmm ..だから、pgAdminを使って影響を受けた行数を取得する方法はありませんか? – DreadAngel

+0

少なくとも、plpqsqlストアドプロシージャを作成することはできますが、SQLインサート文をパラメータとして実行してプロシージャに動的に実行させる必要があると思います。 – gsteff

答えて

7

あなたは私はあなたがその選択の結果をどうしたいのかわから完了していなかったので、私は予告との最後の選択を置き換え匿名コードブロックに

DO $$ 
DECLARE 
    integer_var integer; 
BEGIN 
    delete from "Menu" where "ID" = 0; 
    GET DIAGNOSTICS integer_var = ROW_COUNT; 
    raise notice 'Rows removed: %', integer_var; 
END$$; 

を実行するためにDOを使用することができますこの方法はDOを説明するのが最も簡単でした。

これが最後にいくつかのプログラムに組み込まれる予定の場合、おそらく影響を受ける行の数を直接取得する可能性があります。 libpqには、影響を受ける行の数を返す関数PQcmdTuplesが含まれています。 PHPは関数pg_affected_rowsを持ち、JDBC executeUpdateは影響を受ける行の数を返します。

関連する問題