Eine Prozedur gibt keinen Wert zurück. Eine Funktion gibt einen Wert zurück, aber Sie sollten keine DML in einer Funktion ausführen (andernfalls können Sie die Funktion in einer SQL-Anweisung nicht referenzieren, da Sie normalerweise nur Leseberechtigten Zugriff gewähren können zu allen Funktionen, damit Benutzer konsistent Berechnungen durchführen usw.).
Sie können der Prozedur einen OUT-Parameter hinzufügen, um den Status zurückzugeben. Wenn "Erfolg" bedeutet, dass eine oder mehrere Zeilen aktualisiert wurden, können Sie SQL% ROWCOUNT verwenden, um die Anzahl der von der vorherigen SQL-Anweisung geänderten Zeilen zu ermitteln und diese zum Auffüllen des Rückgabeparameters zu verwenden, d. H.
%Vor%Natürlich bin ich im Hinblick auf die allgemeine Klarheit der Codeeinstellungen über OUT-Parameter, die scheinbar versuchen, einen Statuscode zurückzugeben, zweifelhaft. Sie sind im Allgemeinen viel besser gedient, wenn Sie Erfolg annehmen und im Falle eines Fehlers Ausnahmen auslösen.
Sie suchen wahrscheinlich nach einer Funktion.
%Vor%Hinweis: Wo ich arbeite, setzen wir Funktionen in der Regel in ein sql-Paket.
Das SQL%ROWCOUNT
gibt nur einen Wert zurück, unmittelbar nachdem eine DML ihren Wert zurückgesetzt hat, wenn eine andere DML ausgeführt wird.
Um das Problem zu umgehen, als ich löschte in einer Schleife löste ich den folgenden Befehl nach dem dml:
%Vor% Bitte stellen Sie sicher, dass Sie row_count := 0;