IF <cond> THEN <anweisungen> [ELSE <anweisungen> ] END IF
Die Angabe <cond> ist eine gültige Bedingung. Hinter THEN sowie ggf. hinter ELSE folgen eine oder mehrere Anweisungen, die ausgeführt werden, wenn die Bedingung bzw. der ELSE-Fall zutrifft.
IF-Anweisungen können geschachtelt werden. Wenn die Schachtelung zu tief wird, empfiehlt sich jedoch eher die Verwendung einer SELECT-Anweisung.
SELECT <expr-1> [[BUT] OF {<expr-2> | <cond-1>} ... <anweisungen> ] [OTHERWISE <anweisungen> ] END SELECT
Hinter OF kann ein Ausdruck <expr-2> oder eine Bedingung<cond-1> stehen.
<expr-2> kann eine Liste von Ausdrücken enthalten. Mehrere Ausdrücke werden durch Komma getrennt.
BUT OF bedeutet eine Verneinung, d.h. der Vergleich ist wahr, wenn kein Ausdruck aus der Liste bzw. die OF-Bedingung nicht zutrifft.
Bei der Select-Anweisung wird der Inhalt von <expr-1> mit dem Inhalt von <expr-2> bzw. <cond-1> verglichen. Enthält <expr-2> eine Liste von Ausdrücken, wird jeder dieser Ausdrücke einzeln mit <expr-1> verglichen. Wenn das Ergebnis wahr ist (TRUE), werden die Anweisungen hinter <expr-2> bzw. <cond-1> ausgeführt. Wenn nicht, wird der Inhalt von expr-1 mit dem der nächsten OF-Angabe verglichen.
Sobald eine OF-Angabe wahr war, werden die dahinter stehenden Anweisungen ausgeführt und anschließend die Ausführung der SELECT-Anweisung beendet. Wenn alle OF-Angaben überprüft wurden, und keine davon wahr war, werden - falls vorhanden - die Anweisungen hinter OTHERWISE ausgeführt. Es wird immer höchstens ein Anweisungsblock ausgeführt.
Die anderen OF-Angaben werden nicht mehr überprüft,
Beispiel für eine Select-Anweisung mit einer Liste von Ausdrücken:
SELECT Wert OF 5, 10, 15, 20 Ergebnis = Wert / 5 BUT OF 1, 3, 7, 9 Ergebnis = Wert / 2 OTHERWISE Ergebnis = 0 END SELECT
Wenn hinter der OF-Angabe Bedingungen stehen sollen, sollte <expr-1> „TRUE“ oder „FALSE“ lauten, damit ein sinnvoller Vergleich möglich ist. Die entsprechende Select-Anweisung mit Bedingung könnte so aussehen, wobei hier noch eine zusätzliche größer-Abfrage enthalten ist, die in dem obigen Beispiel so nicht möglich wäre:
SELECT TRUE OF Wert = 5 OR Wert = 10 or Wert = 15 or Wert = 20 Ergebnis = Wert / 5 OF Wert > 20 Ergebnis = Wert / 10 BUT OF Wert = 1 or Wert = 3 or Wert = 7 or Wert = 9 Ergebnis = Wert / 2 OTHERWISE Ergebnis = 0 END SELECT
Das folgende Beispiel zeigt ein falsche Select-Anweisung:
SELECT Name OF "Müller" or "Meier" ...... END SELECT
Es würde in dem Fall zuerst die OF-Angabe („Müller“ or „Meier“) ausgewertet, die als Bedingung erkannt wird und TRUE ergibt, wenn einer der beiden Strings nicht leer ist. Und das Ergebnis (TRUE) wird dann mit dem Inhalt von Name verglichen, also z.B. IF TRUE = „Schulze“, was keinen sinnvollen Vergleich darstellt. Der Syntax-Parser kann nicht erkennen, ob das Absicht ist, denn er kennt den Inhalt der Variablen nicht. Es könnte ja hinter dem SELECT durchaus auch ein True- oder False-Wert stehen, der verglichen werden soll. Die Anweisung wird also ohne Fehlermeldung akzeptiert werden.
<ergebnis> = ? <bedingung> ? <wert-wenn-wahr> : <wert-wenn-falsch>
Die Dreifachoperation (Ternary Operation) fasst eine einfache IF-ELSE-Bedingung mit Wertzuweisung in einem Ausdruck zusammen. Derselbe Sachverhalt ließe sich auch in einer IF-Anweisung ausdrücken, die wie folgt aussehen würde:
IF <bedingung> THEN ergebnis = <wert-wenn-wahr> ELSE ergebnis = <wert-wenn-falsch> END IF
Sie wird eingeleitet durch das Fragezeichen; die Bedingung wird mit einem weiteren Fragezeichen abgeschlossen. Danach kommt zunächst der Wert, der eingesetzt werden soll, wenn die Bedingung wahr ist, anschließend ein Doppelpunkt, und danach der Wert, der eingesetzt werden soll, wenn die Bedingung nicht zutrifft.
<wert-wenn-wahr> und <wert-wenn-falsch> sind jeweils Ausdrücke .
Beispiel:
Wenn die Person jünger als 21 ist, wird mit 10 multipliziert, sonst mit dem Alter:
Beitrag = ? Alter < 21 ? 10 * Berechnungsfaktor : Alter * Berechnungsfaktor
oder
Beitrag = (? Alter < 21 ? 10 : Alter) * Berechnungsfaktor