これはこことここで何度も尋ねられましたが、PL/PgSQL関数で更新ステートメントを実行してGET DIAGNOSTICS integer_var = ROW_COUNT
.
生のSQLでこれを行う必要があります。
たとえば、MS SQL SERVER には @@ROWCOUNT があり、次のように使用できます。
UPDATE <target_table>
SET Proprerty0 = Value0
WHERE <predicate>;
SELECT <computed_value_columns>
FROM <target>
WHERE @@ROWCOUNT > 0;
データベースへの1回の往復で、更新が成功したかどうかがわかり、計算された値が返されます。
'@@ROWCOUNT' の代わりに何を使用できますか? 現時点でこれが実際に不可能であることを誰かが確認できますか?
前もって感謝します。
EDIT 1:生のSQLを使用する必要があることを確認します(元の説明では「生のplpgsql」と書きました)。
私の質問をより明確にするために、update ステートメントは 1 行のみに影響することを考慮し、楽観的同時実行について考えてください。
クライアントは
SELECT
最初に声明を出しました。彼は UPDATE を構築し、どのデータベースの計算カラムを SELECT 句に含めるかを知っています。特に、述語には、行が更新されるたびに計算されるタイムスタンプが含まれます。
したがって、1 行が返された場合は、すべて問題ありません。行が返されない場合は、以前の更新があったことがわかり、クライアントは句を再度更新する前にデータを更新する必要がある可能性があります。これが、計算列を返す前に更新ステートメントの影響を受けた行数を知る必要がある理由です。更新が失敗した場合、行は返されません。