TAKTUM Logo


Oracle Schulung
Oracle Schulung

Oracle PL/SQL Tutorial: Ablaufsteuerung
PL/SQL Konstrukte zur Ablaufsteuerung eines Programms

Zuweisung

Variable := Ausdruck;

Beispiel:

declare
  a number(5);
  b boolean;
begin
  a := (3 + 5) / 8;
  b := a = 5;
    ...
  b := TRUE;
end;

Man betrachte die folgende Zuweisung:

a := b + c;

Die Variable a wird nach der Zuweisung den Wert NULL enthalten, wenn entweder b oder c den Wert NULL enthalten!

Bedingte Verzweigung

if - then

if a = 5 then
  ...
end if;

Zwischen then und end if muß mindestens ein Befehl stehen (oder der leere Befehl: NULL;)

if - then - else

if a = 5 then
    ...
else
    ...
end if;

if - then - elsif

if a = 5 then
    ...
elsif a = 6 then
    ...
else
    ...
end if;

Sprung (goto)  

Definition von Sprungmarken:

<<Sprungmarke>>

Eine Sprungmarke muß unmittelbar vor einem ausführbaren Befehl definiert werden (also nicht end, end if ...).

GOTO - Befehl

GOTO Sprungmarke

Beispiel:

  ...
  if not berechnen then
    goto ende;
  end if;
  ...
<<ende>>
  ...

Einschränkungen 

Eine GOTO - Anweisung kann nur zu einem Label verzweigen, das auf der gleichen oder einer höheren Verarbeitungsebene steht. So ist es z.B. nicht erlaubt, von außen in eine Verzweigung, Schleife oder Block zu springen.

Beispiel:

begin
  goto nicht_erlaubter_sprung;
  if a = 5 then
    <<nicht_erlaubter_sprung>>
    b := 8;
  end if;
end;

Es ist nicht erlaubt, aus einem Exception Handler herauszuspringen:

begin
  ...
  << nicht_erlaubter_sprung>>
  ..
exception when OTHERS then
  goto nicht_erlaubter_sprung;
end;

Schleifen

EXIT - Befehl 

Der EXIT - Befehl bewirkt das Verlassen der aktuellen Schleife. Es wird nach dem END LOOP - Befehl fortgefahren. Der Befehl ist nur im Schleifen - Kontext nutzbar, es ist nicht möglich, z.B. eine verschachtelte IF - Abfrage oder einen Block mit dem EXIT - Befehl zu verlassen. Dazu dient das GOTO - Statement.

EXIT WHEN - Befehl

EXIT WHEN <boolscher Ausdruck>;

Die Schleife wird nur verlassen, wenn eine Bedingung erfüllt ist. Es ist dies eine Kurzschreibweise für:

if <boolscher Ausdruck> then
  exit;
end if;

Unbedingte Schleife (loop)

loop
  ...
end loop;

Es handelt sich generell um eine Endlos - Schleife. Sie muß mit dem EXIT - Befehl verlassen werden.

Schleifenmarken 

Um bei verschachtelten Schleifen angeben zu können, welche Schleife durch einen EXIT - Befehl verlassen werden soll, setzt man vor der Schleife eine entsprechende Sprungmarke und gibt sie beim EXIT - Befehl an. Das führt im folgenden Beispiel zum Verlassen beider Schleifen.

begin
  << aeussere_schleife >>
  loop
    ...
    loop
      ...
      exit aeussere_schleife;
    end loop
  end loop aeussere_schleife;
end;

WHILE - Schleife 

In einer WHILE - Schleife wird eine Bedingung spezifiziert. Die Schleife wird dann so lange durchlaufen, bis diese Bedingung erfüllt ist. Die Bedingung wird vor jedem Schleifendurchlauf erneut überprüft.

while <boolscher Ausdruck> loop
  ...
end loop

FOR - Schleife

for Zählvariable in <linke Grenze>..<rechte Grenze> loop
  ...
end loop;

Die Zählvariable kann nur ganze Zahlen annehmen, wobei die Schrittweite immer eins beträgt. Rückwärts laufende Schleifen erfordern stattdessen die Angabe IN REVERSE statt IN.

Innerhalb der Schleife kann die Zählvariable nicht das Ziel einer Zuweisung sein. ACHTUNG: Sie überdeckt eine bereits existierende Variable gleichen Namens in dem Block, in dem sich die Schleife befindet, d.h. der Wert der Zählvariablen ist nach dem END LOOP nicht verfügbar. Die Zählvariable wird nicht im DECLARE - Teil des PL/SQL - Blocks oder im Deklarationsteil einer Prozedur definiert. Die Deklaration erfolgt durch die Schleife selbst.

Die Grenzen werden zur Laufzeit einmalig vor der Schleife berechnet, d.h. die Grenzen sind während der Schleifendurchläufe nicht veränderbar. Um eine FOR - Schleife vorzeitig zu verlassen, steht der EXIT - Befehl zur Verfügung.



Stichwörter

Ablaufsteuerung begin end if then else elsif endif while for loop Schleife Schleifen Goto Sprung Beispiel Beispiele