Oracle PĘTLA PL/SQL z przykładem

Czym są pętle?

Pętle umożliwiają wykonanie określonej części kodu programu żądaną liczbę razy.

W tym samouczku przyjrzymy się koncepcji pętli w języku PL/SQL i przepływowi sterowania w pętlach.

Wprowadzenie do koncepcji pętli

Koncepcja pętli zapewnia następujące korzyści w kodowaniu.

  • Możliwość ponownego wykorzystania kodu
  • Zmniejszony rozmiar kodu
  • Łatwy przepływ kontroli
  • Zmniejszona złożoność

Poniższy diagram przedstawia koncepcję pętli w sposób obrazowy

Oracle PĘTLA PL/SQL

Na powyższym schemacie zostanie sprawdzony warunek pętli i dopóki warunek pętli będzie spełniony, blok wykonawczy zostanie wykonany.

W każdej iteracji zmienna licznika pętli, która faktycznie decyduje o warunku pętli, powinna zostać zmodyfikowana, aby sterowanie mogło wyjść z pętli. W niektórych przypadkach ta zmienna licznika pętli jest operatorem inkrementacji/dekrementacji dla wstępnie zdefiniowanej liczby, a w niektórych przypadkach jest warunkiem wyszukiwania, który kontynuuje wykonywanie bloku, dopóki go nie spełni.

Instrukcje sterowania pętlą

Przed zapoznaniem się z koncepcją pętli obowiązkowe jest zapoznanie się z instrukcjami sterującymi pętli. Instrukcje sterujące pętli to te, które faktycznie kontrolują przebieg wykonywania wewnątrz pętli. Poniżej znajduje się szczegółowy opis instrukcji sterujących pętli.

DALEJ

To słowo kluczowe wysyła instrukcję do silnika PL/SQL, że ilekroć silnik PL/SQL napotka to słowo kluczowe w pętli, pominie pozostały kod w bloku wykonawczym kodu i natychmiast rozpocznie się następna iteracja. Będzie to używane głównie, jeśli kod wewnątrz pętli chce zostać pominięty dla pewnych wartości iteracji.

WYJDŹ / WYJDŹ KIEDY

To słowo kluczowe wysyła instrukcję do silnika PL/SQL, która informuje, że ilekroć silnik PL/SQL napotka to słowo kluczowe, natychmiast opuści bieżącą pętlę. Jeśli silnik PL/SQL natrafi na EXIT w pętli zagnieżdżonej, to wyjdzie z pętli, w której został zdefiniowany, czyli w pętlach zagnieżdżonych, podanie EXIT w pętli wewnętrznej spowoduje jedynie wyjście ze sterowania z pętli wewnętrznej, ale nie z pętli zewnętrznej. Po „EXIT WHEN” następuje wyrażenie, które daje wynik logiczny. Jeśli wynik jest PRAWDA, sterowanie zakończy się.

GOTO

To polecenie przeniesie kontrolę do polecenia oznaczonego etykietą („GOTO ;”). Ma ono następujące ograniczenia

  • Przekazanie kontroli może nastąpić wyłącznie w ramach podprogramów.
  • Nie można przenieść kontroli z części obsługującej wyjątki do części wykonawczej

Nie zaleca się używania tego stwierdzenia, chyba że nie ma innych alternatyw, ponieważ identyfikowalność kontroli kodu będzie w programie bardzo trudna ze względu na przeniesienie kontroli z jednej części na drugą.

Rodzaje pętli w PL/SQL

PL / SQL zapewnia następujące trzy typy pętli

Podstawowa instrukcja pętli

Ta instrukcja pętli jest najprostszą strukturą pętli w języku PL/SQL. Blok wykonawczy zaczyna się od słowa kluczowego „LOOP” i kończy słowem kluczowym „END LOOP”.

Warunek wyjścia powinien być podany wewnątrz tego bloku wykonawczego, tak aby sterowanie mogło wyjść z pętli.

Aby wyjść z pętli, wymagane jest jawne podanie słowa kluczowego EXIT w części wykonawczej.

Podstawowa instrukcja pętli

 LOOP
<execution block starts>
<EXIT condition based on developer criteria> 
<execution_block_ends>
END LOOP;

Wyjaśnienie składni:

  • W powyższej składni słowo kluczowe „LOOP” oznacza początek pętli, a „END LOOP” oznacza koniec pętli.
  • Blok wykonawczy zawiera cały kod, który należy wykonać, łącznie z warunkiem EXIT.
  • Część wykonująca może zawierać dowolną instrukcję wykonania.

Uwaga: Podstawowa instrukcja pętli bez słowa kluczowego EXIT będzie INFINITE-LOOP, która nigdy się nie zatrzyma.

1 przykład: W tym przykładzie wydrukujemy liczbę od 1 do 5, używając podstawowej instrukcji pętli. W tym celu wykonamy następujący kod.

Podstawowa instrukcja pętli

DECLARE 
a NUMBER:=1; 
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:=a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END:
/

Wyjaśnienie kodu:

  • Linia kodu 2: Deklarowanie zmiennej „a” jako typu danych „NUMBER” i inicjowanie jej wartością „1”.
  • Linia kodu 4: Drukowanie komunikatu „Program uruchomiony”.
  • Linia kodu 5: Słowo kluczowe „LOOP” oznacza początek pętli.
  • Linia kodu 6: Drukuje wartość „a”.
  • Linia kodu 7: Zwiększa wartość „a” o +1.
  • Linia kodu 8: Sprawdza, czy wartość „a” jest większa niż 5.
  • Linia kodu 9: Słowo kluczowe „END LOOP” oznacza koniec bloku wykonawczego.
  • Kod z linii 6 do linii 8 będzie wykonywany aż do osiągnięcia przez „a” wartości 6, gdy warunek zwróci wartość PRAWDA, a sterowanie wyjdzie z pętli.
  • Linia kodu 10: Drukowanie oświadczenia „Program zakończony”

Etykietowanie pętli

W PL/SQL pętle można oznaczać. Etykietę należy umieścić pomiędzy znakami „<<” i „>>”. Etykietowanie pętli, szczególnie w kodach pętli zagnieżdżonych, zapewni większą czytelność. Etykietę można podać w poleceniu EXIT, aby wyjść z tej konkretnej pętli. Używając etykiety, można zmusić element sterujący do bezpośredniego wyjścia z zewnętrznej pętli zagnieżdżonych pętli z dowolnego miejsca wewnątrz pętli, wydając polecenie exit, po którym następuje etykieta zewnętrznej pętli.

Etykietowanie pętli

<<OUTER_LOOP>>
LOOP 
	<execution_block_starts>
	.
	<<INNER_LOOP>>
	LOOP --inner
		<execution_part>
	END LOOP;
	.
	<executi_block_ends>
END LOOP;

Wyjaśnienie składni:

  • W powyższej składni pętla out zawiera jeszcze jedną pętlę.
  • „< >” i „< >” to etykiety tych pętli.

1 przykład: W tym przykładzie wydrukujemy liczbę zaczynając od 1, używając instrukcji pętli Basic. Każda liczba zostanie wydrukowana tyle razy, ile wynosi jej wartość. Górny limit serii jest ustalony w części deklaracji programu. Dowiedzmy się, jak możemy użyć koncepcji etykiety, aby to osiągnąć. W tym celu wykonamy następujący kod

Etykietowanie pętliEtykietowanie pętli

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Wyjaśnienie kodu:

  • Linia kodu 2-3: Deklarowanie zmiennych „a” i „b” jako typu danych „NUMBER”.
  • Linia kodu 4: Deklarowanie zmiennej „upper_limit” jako typu danych „NUMBER” o wartości „4”
  • Linia kodu 6: Drukowanie komunikatu „Program uruchomiony”.
  • Linia kodu 7: Zewnętrzna pętla została oznaczona jako „outer_loop”
  • Linia kodu 9: Wartość „a” zwiększa się o 1.
  • Linia kodu 11: Wewnętrzna pętla została oznaczona jako „inner_loop”.
  • Linia kodu 13: Warunek EXIT sprawdzający, czy wartość „a” jest większa niż wartość „górnego limitu”. Jeśli nie, pójdzie dalej, w przeciwnym razie bezpośrednio wyjdzie z pętli zewnętrznej.
  • Linia kodu 14: Drukowanie wartości „b”.
  • Linia kodu 15: Zwiększa wartość „b” o +1.
  • Linia kodu 16: Warunek EXIT sprawdzający, czy wartość „b” jest większa niż „a”. Jeśli tak, to wyjdzie ze sterowania z pętli wewnętrznej.
  • Linia kodu 14: Drukowanie oświadczenia „Program zakończony”

Podsumowanie

Pętla Podstawowa pętla
Kryteria WYJŚCIA Zakończ, gdy napotkasz słowo kluczowe „EXIT” w części wykonawczej
Stosowanie Dobry do użycia, gdy wyjście nie jest oparte na żadnym konkretnym warunku.