Oracle PL/SQL FOR LOOP z przykładem
⚡ Inteligentne podsumowanie
Oracle Pętla FOR w PL/SQL wykonuje blok kodu znaną liczbę razy, między dolną a górną granicą. Zmienna pętli jest deklarowana niejawnie i samoczynnie inkrementuje, więc nie jest potrzebny ręczny licznik, a słowo kluczowe REVERSE pozwala pętli zliczać w dół.
Czym jest pętla FOR?
Instrukcja „FOR LOOP” najlepiej sprawdza się, gdy chcesz wykonać kod określoną liczbę razy, a nie na podstawie jakiegoś innego warunku.
W tej pętli określono dolną i górną granicę. Pętla jest wykonywana tak długo, jak zmienna pętli znajduje się w tym zakresie.
Zmienna pętli jest samoinkrementalna, więc nie jest wymagana jawna operacja inkrementacji. Zmienna pętli nie musi być deklarowana, ponieważ jest deklarowana niejawnie.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Wyjaśnienie składni:
- Słowo kluczowe „FOR” oznacza początek pętli, a „END LOOP” oznacza jej koniec.
- Zmienna pętli jest oceniana za każdym razem przed wykonaniem części wykonawczej.
- Blok wykonawczy zawiera cały kod, który musi zostać uruchomiony, i może zawierać dowolne polecenie wykonywalne.
- Zmienna loop_variable jest deklarowana niejawnie w trakcie wykonywania pętli i jej zasięg obejmuje wyłącznie wnętrze pętli.
- Gdy zmienna pętli wykracza poza zakres, sterowanie opuszcza pętlę.
- Pętlę można uruchomić w odwrotnej kolejności, dodając słowo kluczowe „REVERSE” przed dolną granicą.
1 przykład: W tym przykładzie drukujemy liczby od 1 do 5 za pomocą instrukcji pętli FOR.
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Wyjaśnienie:
- Code linia 2: Wydruk komunikatu „Program uruchomiony”.
- Code linia 3: Słowo kluczowe „FOR” oznacza początek pętli i deklarowana jest zmienna pętli „a”. Przyjmuje ona teraz wartości od 1 do 5.
- Code linia 5: Drukuje wartość „a”.
- Code linia 6: Słowo kluczowe „END LOOP” oznacza koniec bloku wykonawczego.
- Linia 5 kontynuuje wykonywanie, aż „a” osiągnie wartość 6, w którym momencie warunek przestaje być spełniony, a sterowanie opuszcza pętlę.
- Code linia 7: Wydruk komunikatu „Program zakończony”.
Pętle zagnieżdżone
Instrukcje pętli mogą być również zagnieżdżane. Pętle zewnętrzne i wewnętrzne mogą być różnych typów. W pętli zagnieżdżonej, dla każdej iteracji pętli zewnętrznej, pętla wewnętrzna jest w pełni wykonywana.
LOOP --outer <execution block starts> 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ę.
- Pętle mogą być dowolnego typu, a funkcjonalność wykonania jest taka sama.
1 przykład: W tym przykładzie drukujemy liczby od 1 do 3 za pomocą pętli FOR. Każda liczba jest drukowana tyle razy, ile wynosi jej wartość.
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code Wyjaśnienie:
- Code linia 2: Deklarowanie zmiennej „b” jako typu danych „LICZBA”.
- Code linia 4: Wydruk komunikatu „Program uruchomiony”.
- Code linia 5: Słowo kluczowe „FOR” oznacza początek pętli i deklarowana jest zmienna pętli „a”. Przyjmuje ona teraz wartości od 1 do 3.
- Code linia 7: Za każdym razem resetowanie wartości „b” do „1”.
- Code linia 8: Wewnętrzny pętla while sprawdza warunek a>=b.
- Code linia 10: Drukuje wartość „a”, o ile spełniony jest powyższy warunek.
- Code linia 14: Wydruk komunikatu „Program zakończony”.
Pętla FOR i pętla REVERSE FOR
Domyślnie pętla FOR zlicza w górę od dolnego limitu do górnego. Dodanie słowa kluczowego REVERSE powoduje, że zlicza w dół, podczas gdyping Limity w tej samej kolejności. Oba formularze są pokazane poniżej razem, aby różnica była jasna.
| Forma | Nagłówek | Kolejność wartości |
|---|---|---|
| Rosnąco | DLA W 1 .. 5 | 1, 2, 3, 4, 5 |
| Malejąco | DLA a W ODWROCIE 1 .. 5 | 5, 4, 3, 2, 1 |
Należy pamiętać, że nawet w przypadku REVERSE dolna granica jest nadal zapisywana przed górną granicą; zmienia się jedynie kierunek iteracji. W przypadku pętli, których liczba nie jest znana z góry, podstawowa pętla jest lepszym wyborem.





