Dies wurde mehrmals here und here gefragt, aber keine der Antworten sind in meinem Fall geeignet, weil ich meine Update-Anweisung in einer PL/PgSQL-Funktion nicht ausführen und verwenden möchte GET DIAGNOSTICS integer_var = ROW_COUNT
.Betroffene Zeilen durch UPDATE-Anweisung in RAW plpgsql
Ich muss dies in Raw SQL tun.
Zum Beispiel in MS SQL Server haben wir @@ ROWCOUNT, die wie die verwendet werden könnten folgende:
UPDATE <target_table>
SET Proprerty0 = Value0
WHERE <predicate>;
SELECT <computed_value_columns>
FROM <target>
WHERE @@ROWCOUNT > 0;
In einer Rundreise in die Datenbank ich, ob das Update erfolgreich war und sich die berechneten Werte zurück .
Was könnte anstelle von '@@ ROWCOUNT' verwendet werden? Kann jemand bestätigen, dass dies zu dieser Zeit tatsächlich unmöglich ist?
Vielen Dank im Voraus.
EDIT 1: Ich bestätige, dass ich Raw SQL verwenden muss (ich schrieb "rohe plpgsql" in der ursprünglichen Beschreibung).
In einem Versuch, meine Frage klarer beachten Sie bitte zu machen, dass die Update-Anweisung nur eine Zeile und denkt über Parallelität beeinflusst:
Der Kunde hat ein
SELECT
Statement auf dem ersten.Er erstellt das UPDATE und weiß, welche Datenbank berechnete Spalten in die SELECT-Klausel aufgenommen werden sollen. Das Prädikat enthält unter anderem einen Zeitstempel, der bei jeder Aktualisierung der Zeilen berechnet wird.
Also, wenn wir 1 Zeile zurückgegeben haben, dann ist alles in Ordnung. Wenn keine Zeile zurückgegeben wird, wissen wir, dass es eine vorherige Aktualisierung gab, und der Client muss die Daten möglicherweise aktualisieren, bevor er erneut versucht, die Klausel zu aktualisieren. Aus diesem Grund müssen wir wissen, wie viele Zeilen von der update-Anweisung betroffen waren, bevor berechnete Spalten zurückgegeben werden. Wenn das Update fehlschlägt, sollte keine Zeile zurückgegeben werden.
Bitte geben Sie in Fragen immer Ihre PostgreSQL-Version an. –
Also ** nicht ** willst du in PL/pgSQL sondern in SQL machen. Sonst könnten Sie * GET DIAGNOSTICS verwenden. –
@CraigRinger: Siehe entsprechendes Tag. –