Etykiety, GOTO, EXIT i pętle

W PL/SQL istnieje możliwość użycia etykiet do oznaczenia miejsca w kodzie. Robi się to z wykorzystaniem składni <<>> w którym umieszcza się etykietę. Do takiej etykiety można się potem odwołać np. w instrukcji GOTO, która powoduje przejście do konkretnego miejsca w kodzie tak jak w poniższym przykładzie.

BEGIN
  GOTO etykieta;
  Dbms_Output.put_line('Tekst 1');
  <<etykieta>>
  Dbms_Output.put_line('Tekst 2');
END;

Powyższy kod wyświetli jedynie Tekst 2

Stosowanie GOTO i etykiet jest jednak powszechnie uznawane za trudno czytelnie i nie eleganckie. Istnieje jednak pewien wyjątek dotyczący etykiet związany z pętlami. Etykieta umieszczona przed pętlą pozwala na nadanie jej nazwy, którą potem można wykorzystać w instrukcji EXIT.

BEGIN
  <<petla>>
  LOOP
    Dbms_Output.put_line('W petli...');
    EXIT petla;
  END LOOP;
  Dbms_Output.put_line('Po pętli...');
END;
/

Zazwyczaj jest to „jedynie” elegancja w kodzie i nie wnosi ona zmiany jego zachowania, poza przypadkiem pętli zagnieżdżonych.

BEGIN
  <<petla_zewnetrzna>>
  LOOP
    LOOP
      Dbms_Output.put_line('W petli...');
      EXIT petla_zewnetrzna;
    END LOOP;
  END LOOP;
  Dbms_Output.put_line('Po pętli...');
END;
/

Powyższy kod dzięki wykorzystaniu w pętli wewnętrznej instrukcji EXIT z etykietą pętli zewnętrznej wychodzi z pętli zewnętrznej unikając niekończonego zapętlenia. Zrealizowanie tego samego zachowania bez możliwości określenia z której pętli ma wyjść instrukcja EXIT wymagałoby wykorzystanie, mało eleganckiej w tym momencie, instrukcji IF. Użycie etykiet pętli upraszcza kod i robi go dużo bardziej czytelnym.

Ten wpis został opublikowany w kategorii PL/SQL Podstawy i oznaczony tagami , , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz