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.

  • 🔁 Cel: Pętla uruchamia blok kodu wiele razy, co zmniejsza rozmiar i złożoność kodu.
  • 🧭 Licznik pętli: Zmienna licznika decyduje o warunku pętli i musi się zmienić, aby możliwe było wyjście z pętli.
  • ⏭️ KONTYNUOWAĆ: Pomija resztę bieżącej iteracji i rozpoczyna następną.
  • 🚪 WYJŚCIE / WYJŚCIE GDY: Natychmiast opuszcza pętlę, opcjonalnie, gdy warunek logiczny jest prawdziwy.
  • 🏷️ Etykiety: Etykieta pętli umieszczona pomiędzy podwójnymi nawiasami kątowymi umożliwia EXIT wskazanie zewnętrznej pętli.
  • ♾️. Podstawowa pętla: Działa, dopóki nie zostanie osiągnięte wyraźne EXIT; w przeciwnym razie będzie się powtarzać w nieskończoność.
  • 🧩 Trzy typy: Pętla podstawowa, pętla FOR i pętla WHILE obejmują powszechnie stosowane wzorce.

Oracle Pętla PL/SQL

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.

Looping przepływ koncepcji w PL/SQL

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:

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.

Podstawowa struktura pętli w PL/SQL

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.

Podstawowe drukowanie pętli numerów od 1 do 5

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.

Oznaczona struktura pętli zagnieżdżonej

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

Przykład pętli z etykietą, część 1Przykład pętli z etykietą, część 2

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”.

FAQ

EXIT opuszcza pętlę bezwarunkowo. EXIT WHEN opuszcza pętlę tylko wtedy, gdy następujące wyrażenie boolowskie jest prawdziwe, co eliminuje potrzebę stosowania osobnego IF wokół zwykłego EXIT.

Etykieta pozwala instrukcji EXIT w pętli wewnętrznej opuścić nazwaną pętlę zewnętrzną w jednym kroku. Dzięki temu zagnieżdżony kod jest znacznie łatwiejszy do odczytania niż trackról prostych instrukcji END LOOP.

Jeśli blok nie ma warunku EXIT lub licznik nigdy nie osiąga warunku wyjścia, pętla nigdy się nie zatrzymuje. Zawsze upewnij się, że licznik przesuwa się w kierunku warunku EXIT WHEN.

Często tak. Sztuczna inteligencja może tracsprawdza, czy licznik przesuwa się w kierunku warunku EXIT i ostrzega, gdy pętla nie ma osiągalnego wyjścia, choć wyjście zależne od danych i tak wymaga wykonania testu w celu potwierdzenia.

Funkcja CONTINUE pomija resztę bieżącej iteracji i przechodzi do następnej. Jest to przydatne, gdy pewne wartości powinny zostać zignorowane bez całkowitego opuszczania pętli.

Podsumuj ten post następująco: