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ół.

  • 🔢 Najlepszy dla: Pętla FOR jest przeznaczona do znanej liczby iteracji, a nie do warunków otwartych.
  • 📏 Zakres: Dolny i górny limit określają, ile razy pętla zostanie wykonana.
  • ⚙️ Licznik niejawny: Zmienna pętli jest deklarowana automatycznie i inkrementuje się samodzielnie.
  • 🎯 Zakres: Zmienna pętli istnieje tylko wewnątrz pętli.
  • 🔄 ODWRACAĆ: Dodanie REVERSE przed dolnym limitem powoduje, że pętla zaczyna odliczać w dół.
  • 🪜 Zagnieżdżone: Pętle mogą być zagnieżdżane, a pętla wewnętrzna wykonuje się w pełni przy każdej zewnętrznej iteracji.
  • 🚪 Automatyczne wyjście: Pętla kończy się automatycznie, gdy zmienna opuszcza zakres.

Oracle Pętla PL/SQL For

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.

Pętla FOR drukująca liczby od 1 do 5

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.

Zagnieżdżona struktura pętli

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ść.

Przykład zagnieżdżonej pętli FOR część 1

Przykład zagnieżdżonej pętli FOR część 2

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.

FAQ

Nie. Pętla FOR deklaruje swoją zmienną niejawnie i istnieje ona tylko wewnątrz pętli. Deklaracja zmiennej o tej samej nazwie poza pętlą nie ma wpływu na zmienną używaną przez pętlę.

Polecenie REVERSE powoduje, że pętla iteruje od górnej granicy do dolnej. Granice są nadal zapisywane od najniższej do najwyższej; odwracana jest jedynie kolejność odwiedzania wartości.

Użyj pętli FOR, gdy liczba iteracji jest znana z góry, np. w ustalonym zakresie. Użyj pętli WHILE, gdy pętla powinna być kontynuowana, dopóki spełniony jest warunek, a liczba iteracji nie jest ustalona.

Tak, gdy podstawowa pętla po prostu liczy między dwiema stałymi wartościami. Sztuczna inteligencja może zastąpić ręczny licznik i EXIT zakresem FOR, skracając kod. Upewnij się, że granice są zgodne z oryginałem.

Nie. Zmienna pętli jest tylko do odczytu w pętli, więc przypisanie do niej powoduje błąd kompilacji. Aby zmienić przepływ, użyj osobnej zmiennej lub wyjdź z pętli za pomocą EXIT.

Podsumuj ten post następująco: