Ich habe eine PL / SQL-Funktion (läuft unter Oracle 10g), in der ich einige Zeilen aktualisiere. Gibt es eine Möglichkeit herauszufinden, wie viele Zeilen vom UPDATE betroffen waren? Wenn ich die Abfrage manuell ausführe, wird mir mitgeteilt, wie viele Zeilen betroffen waren. Ich möchte diese Nummer in PL / SQL erhalten.
oracle
plsql
sql-update
Thomas Lötzer
quelle
quelle
INSERT INTO
..COMMIT
und auch in der gleichen Prozedur nach dem Einfügen, die ich habeUPDATE SET WHERE EXISTS..COMMIT
, aber meinei := SQL%rowcount;
gibt alle Zeilen anstelle der Zeilen zurück, die nur aktualisiert wurden. Was könnte sein?Für diejenigen, die die Ergebnisse von einem einfachen Befehl erhalten möchten, könnte die Lösung sein:
Das Grundproblem besteht darin, dass SQL% ROWCOUNT eine PL / SQL-Variable (oder -Funktion) ist und nicht direkt über einen SQL-Befehl aufgerufen werden kann. Dies kann durch Verwendung eines PL / SQL-Blocks ohne Namen erreicht werden.
... Wenn jemand eine Lösung hat, um sie in einem SELECT-Befehl zu verwenden, wäre ich interessiert.
quelle
Alternativ können
SQL%ROWCOUNT
Sie dies innerhalb der Prozedur verwenden, ohne eine Variable deklarieren zu müssenquelle
SQL%ROWCOUNT
kann auch ohne Zuweisung verwendet werden (zumindest ab Oracle 11g) ).Solange im aktuellen Block keine Operation (Aktualisieren, Löschen oder Einfügen) ausgeführt wurde,
SQL%ROWCOUNT
wird diese auf null gesetzt. Dann bleibt es bei der Anzahl der Zeilen, die von der letzten DML-Operation betroffen sind:Sagen wir, wir haben Tisch CLIENT
Wir würden es so testen:
Ergebend:
quelle
2 Client aktualisiert für 1
kein Client mit 2 val_cli.
Kein Client mit 3 val_cli.
1 Client aktualisiert für 4
kein Client mit 5 val_cli.
1 Client aktualisiert für 6
kein Client mit 7 val_cli.
Kein Client mit 8 val_cli.
Kein Client mit 9 val_cli.
1 Client für 10 aktualisiert
Anzahl der insgesamt betroffenen Zeilen Aktualisierungsvorgang: 5
quelle
Verwenden Sie die Analysefunktion Count (*) OVER PARTITION BY NULL. Dies zählt die Gesamtzahl der Zeilen
quelle