Ausführungsreihenfolge von WHEN-Klauseln in einer CASE-Anweisung

9

Gegeben sei der folgende Text einer Fallaussage:

%Vor%

Ich nehme an, Zeile 2 wird immer vor Zeile 4 ausgeführt? Dann lese ich Anweisungen wie ' SQL ist eine deklarative Sprache, was bedeutet, dass es der SQL-Engine sagt, was zu tun ist, nicht wie ' in

Reihenfolge der Ausführung der SQL-Abfrage

und frage mich, ob dies auch die Reihenfolge der Ausführung in der CASE-Anweisung betrifft. Im Wesentlichen kann ich den obigen Code unverändert lassen, ohne Zeile 4 in

ändern zu müssen %Vor%     
The Ghost 02.07.2014, 10:45
quelle

3 Antworten

7

Der Wert, der zurückgegeben wird, ist der Wert des Ausdrucks THEN für die früheste WHEN -Klausel (textuell), die übereinstimmt. Das heißt, wenn Ihre Bedingungen für Zeile 2 erfüllt sind, lautet das Ergebnis A2 .

Aber, wenn Ihre THEN -Ausdrücke komplexer als nur literale Werte waren, können einige der Arbeiten, diese Ausdrücke auszuwerten, vorkommen, selbst wenn dieser Ausdruck nicht benötigt wird.

z. B.

%Vor%

könnte einen Division-by-Zero-Fehler erzeugen, auch wenn r.code nicht gleich 0120 ist, und selbst wenn es gleich 00 ist, sagen wir. Ich weiß nicht, was der Standard zu diesem speziellen Thema zu sagen hat, aber ich weiß, dass es für einige Produkte gilt.

    
Damien_The_Unbeliever 02.07.2014, 10:52
quelle
1

AFAIK, Die Reihenfolge von CASE evaluation ist die Reihenfolge, die Sie in Ihrer Abfrage angegeben haben. In Ihrem Fall ist die Reihenfolge der Auswertung 1,2,3,4 ... , 7

  

kann ich den obigen Code unverändert lassen, ohne Zeile 4 in

ändern zu müssen

Sie können Ihre 2. CASE ändern und einen ELSE -Teil wie unten eintragen, der sich um 4. CASE evaluation kümmert und Sie können die 4. Auswertung komplett entfernen

%Vor%     
Rahul 02.07.2014 10:52
quelle
1

Macht nichts:

"Die CASE-Anweisung bewertet ihre Bedingungen sequenziell und stoppt mit der ersten Bedingung, deren Bedingung erfüllt ist."

Ссылка

    
The Ghost 02.07.2014 10:54
quelle

Tags und Links