oracle-Prozedur gibt Integer zurück

8

In Oracle möchte ich einen Lösch-Sproc erstellen, der basierend auf dem Ergebnis der Löschung eine ganze Zahl zurückgibt.

das ist was ich bisher habe.

%Vor%

Ich habe versucht, einen RETURNS INTEGER zu setzen, aber der SPROC kompiliert nicht.

    
shaunf 04.11.2008, 16:21
quelle

5 Antworten

2

Verwenden Sie eine Funktion und den impliziten SQL-Cursor, um die Anzahl der gelöschten Zeilen zu bestimmen

%Vor%

Das sollte funktionieren

    
stjohnroe 04.11.2008, 17:02
quelle
16

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.

    
Justin Cave 04.11.2008 16:29
quelle
5

Sie können eine gespeicherte Prozedur verwenden, um Ergebnisse zurückzugeben.

%Vor%

Um die Prozedur aufzurufen, verwenden Sie etwas wie:

%Vor%     
user34850 06.11.2008 22:08
quelle
0

Sie suchen wahrscheinlich nach einer Funktion.

%Vor%

Hinweis: Wo ich arbeite, setzen wir Funktionen in der Regel in ein sql-Paket.

    
Jacob Schoen 04.11.2008 16:33
quelle
0

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;

deklarieren und initialisieren     
PG08 de Spurs 22.11.2013 09:06
quelle

Tags und Links