Oracle PĘTLA PL/SQL z przykładem
⚡ Inteligentne podsumowanie
Pętle PL/SQL wykonują fragment kodu wielokrotnie, określoną liczbę razy. PL/SQL oferuje podstawowe pętle FOR i WHILE, kontrolowane przez CONTINUE, EXIT, EXIT WHEN i GOTO. Pętle można etykietować, aby ułatwić zarządzanie zagnieżdżonymi strukturami.
Czym są pętle?
Pętle pozwalają na wykonanie określonej części kodu programu określoną liczbę razy. W tym samouczku przyjrzymy się koncepcji pętli w PL/SQL oraz 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 sterowania.
- Zredukowana złożoność.
Poniższy schemat przedstawia toaletęping pojęcie.
Na powyższym diagramie sprawdzany jest warunek pętli i dopóki jest spełniony, uruchamiany jest blok wykonawczy.
W każdej iteracji zmienna licznika pętli, która decyduje o warunku pętli, powinna się zmienić, aby sterowanie mogło wyjść z pętli. W niektórych przypadkach licznik ten zwiększa lub zmniejsza predefiniowaną wartość, a w innych jest warunkiem wyszukiwania, który kontynuuje wykonywanie bloku, aż zostanie spełniony.
Instrukcje sterowania pętlą
Zanim poznasz koncepcję pętli, ważne jest, aby poznać instrukcje sterujące pętlami. Instrukcje te sterują przepływem wykonywania wewnątrz pętli.
DALEJ
To słowo kluczowe instruuje silnik PL/SQL, że za każdym razem, gdy napotka polecenie CONTINUE w pętli, pomija pozostały kod w bloku wykonania i natychmiast rozpoczyna kolejną iterację. Jest to używane głównie wtedy, gdy kod wewnątrz pętli powinien zostać pominięty dla określonych wartości iteracji.
WYJDŹ / WYJDŹ KIEDY
To słowo kluczowe instruuje silnik PL/SQL, aby natychmiast wyszedł z bieżącej pętli. W pętli zagnieżdżonej polecenie EXIT w pętli wewnętrznej powoduje wyjście tylko z pętli wewnętrznej, a nie z pętli zewnętrznej. Po poleceniu „EXIT WHEN” następuje wyrażenie zwracające wynik logiczny; jeśli wynik jest równy TRUE, sterowanie zostaje zakończone.
GOTO
To polecenie przekazuje kontrolę do polecenia oznaczonego etykietą („GOTO ;”). Ma ono następujące ograniczenia:
- Przekazanie kontroli może nastąpić wyłącznie w ramach podprogramów.
- Przeniesienia kontroli nie można dokonać z części obsługującej wyjątki do części wykonawczej.
Nie zaleca się stosowania tego polecenia, chyba że nie ma alternatywy, ponieważ kontrola kodu tracMożliwość realizacji staje się bardzo trudna, gdy kontrola jest przenoszona 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
Poniższa tabela porównuje te trzy pętle, zanim zostanie omówiona szczegółowo podstawowa pętla.
| Pętla | Kryteria wyjścia | Najlepiej stosować, gdy |
|---|---|---|
| Podstawowa pętla | Jawne WYJŚCIE w bloku | Wyjście nie jest oparte na stałej liczbie lub stanie |
| Dla pętli | Licznik osiągnął swój koniec zasięgu | Liczba iteracji jest znana z góry |
| Pętla WHILE | Warunek staje się fałszywy | Pętla powinna działać dopóki spełniony jest warunek |
Podstawowa instrukcja pętli
To najprostsza struktura pętli w PL/SQL. Blok wykonania rozpoczyna się słowem kluczowym „LOOP” i kończy słowem kluczowym „END LOOP”. Warunek wyjścia powinien być podany wewnątrz bloku wykonania, aby sterowanie opuściło pętlę, a słowo kluczowe EXIT musi być podane jawnie.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Wyjaśnienie składni:
- Słowo kluczowe „LOOP” oznacza początek pętli, a „END LOOP” oznacza jej koniec.
- Blok wykonawczy zawiera cały kod, który musi zostać uruchomiony, łącznie z warunkiem EXIT.
- Część wykonawcza może zawierać dowolne polecenie wykonywalne.
Uwaga: Podstawowa instrukcja pętli bez słowa kluczowego EXIT jest pętlą nieskończoną, która nigdy się nie kończy.
1 przykład: W tym przykładzie drukujemy liczby od 1 do 5, wykorzystując podstawową instrukcję 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; /
Code Wyjaśnienie:
- Code linia 2: Deklarowanie zmiennej „a” jako „NUMBER” i inicjowanie jej wartością „1”.
- Code linia 4: Wydruk komunikatu „Program uruchomiony”.
- Code linia 5: Słowo kluczowe „LOOP” oznacza początek pętli.
- Code linia 6: Drukuje wartość „a”.
- Code linia 7: Zwiększa wartość 'a' o 1.
- Code linia 8: Sprawdza, czy wartość „a” jest większa niż 5.
- Code linia 9: Słowo kluczowe „END LOOP” oznacza koniec bloku wykonawczego.
- Linie od 6 do 8 są wykonywane do momentu, aż „a” osiągnie wartość 6, w którym to momencie warunek zwróci wartość TRUE, a sterowanie opuści pętlę.
- Code linia 10: Wydruk komunikatu „Program zakończony”.
Etykietowanie pętli
W PL/SQL pętle mogą być etykietowane. Etykieta powinna być zawarta między znakami „<<” i „>>”. Etykietowanie pętli, szczególnie pętli zagnieżdżonych, zapewnia większą czytelność. Etykietę można podać w poleceniu EXIT, aby wyjść z danej pętli, dzięki czemu sterowanie może bezpośrednio wyjść z pętli zewnętrznej struktury zagnieżdżonej, podając polecenie EXIT, a następnie etykietę pętli zewnętrznej.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Wyjaśnienie składni:
- Pętla zewnętrzna ma wewnątrz jeszcze jedną pętlę.
- '< >' i '< >' są etykietami tych pętli.
1 przykład: W tym przykładzie drukujemy liczby zaczynając od 1, używając prostej instrukcji pętli. Każda liczba jest drukowana tyle razy, ile wynosi jej wartość. Górna granica serii jest ustalona w części deklaracyjnej. W tym celu wykorzystujemy koncepcję etykiety.
DECLARE a NUMBER:= 0; b NUMBER; upper_limit NUMBER := 4; BEGIN dbms_output.put_line('Program started.'); <<outer_loop>> LOOP a:= a+1; b:= 1; <<inner_loop>> LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:= b+1; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Wyjaśnienie:
- Code wiersz 2-3: Deklarowanie zmiennych „a” i „b” jako typu danych „LICZBA”.
- Code linia 4: Deklarowanie zmiennej „upper_limit” jako „NUMBER” z wartością „4”.
- Code linia 6: Wydruk komunikatu „Program uruchomiony”.
- Code linia 7: Pętla zewnętrzna oznaczona jest jako „outer_loop”.
- Code linia 9: Wartość „a” zwiększa się o 1.
- Code linia 11: Pętla wewnętrzna jest oznaczona jako „inner_loop”.
- Code linia 13: Warunek EXIT sprawdza, czy „a” jest wyższe niż wartość „upper_limit”. Jeśli nie, przechodzi dalej; w przeciwnym razie od razu wychodzi z pętli zewnętrznej.
- Code linia 14: Drukowanie wartości „b”.
- Code linia 15: Zwiększa wartość 'b' o 1.
- Code linia 16: Warunek EXIT sprawdzający, czy „b” jest wyższe od „a”. Jeśli tak, kończy pętlę wewnętrzną.
- Code linia 19: Wydruk komunikatu „Program zakończony”.







