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
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
- Dla instrukcji pętli
- Instrukcja pętli while
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.
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.
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.
<<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
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. |