PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Podobne dokumenty
Bloki anonimowe w PL/SQL

PL/SQL. Zaawansowane tematy PL/SQL

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

PODSTAWY BAZ DANYCH 13. PL/SQL

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

1. ELEMENTY JĘZYKA PL/SQL

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku

Oracle PL/SQL. Paweł Rajba.

Podstawy Programowania Podstawowa składnia języka C++

LibreOffice Calc VBA

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Kiedy i czy konieczne?

Bazy danych 2 Laboratorium 2

PL/SQL. Lidia Małkiewicz i Cezary Skubała

Struktura pliku projektu Console Application

Cw.12 JAVAScript w dokumentach HTML

PL/SQL. Funkcje wbudowane

Algorytmika i Programowanie VBA 1 - podstawy

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

15. Funkcje i procedury składowane PL/SQL

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

ForPascal Interpreter języka Pascal

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Pakiety podprogramów Dynamiczny SQL

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Bloki anonimowe w PL/SQL

Powtórka algorytmów. Wprowadzenie do języka Java.

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

11 marca Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Język PL/SQL Wprowadzenie

Deklarowanie kursora

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Struktury sterowania PL/SQL

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

1 Podstawy c++ w pigułce.

2 PL/SQL - podstawy Zmienne i stałe Operatory SQL w PL/SQL Instrukcje sterujące... 8

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Język SQL. Rozdział 3. Funkcje wierszowe

Powtórka algorytmów. Wprowadzenie do języka Java.

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Język PL/SQL Wprowadzenie

Wprowadzenie do Scilab: podstawy języka Scilab

Funkcje. Rozdział 3a Funkcje wierszowe. Funkcje znakowe (1) Funkcje wierszowe

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Odczyt danych z klawiatury Operatory w Javie

BAZY DANYCH W APLIKACJACH SIECIOWYCH

Język PL/SQL. Rozdział 1. Wprowadzenie do języka PL/SQL

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Wstęp do programowania

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Bazy Danych i Usługi Sieciowe

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Oracle PL/SQL. Paweł Rajba.

Podstawy programowania w języku C

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Języki skryptowe w programie Plans

3. Instrukcje warunkowe

Wprowadzenie do języka PL/SQL. Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL. Zmienne rekordowe.

Język PL/SQL. Rozdział 2. Kursory

Język PL/SQL Procedury i funkcje składowane

Oracle PL/SQL. Paweł Rajba.

Programowanie obiektowe

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Wprowadzenie do języka PL/SQL. Rozdział 9 Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

ZMIENNE. Podstawy PHP

Pętle. Dodał Administrator niedziela, 14 marzec :27

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

System operacyjny Linux

Pętla for. Wynik działania programu:

Pascal - wprowadzenie

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wprowadzenie do programowania w VBA

JAVAScript w dokumentach HTML (1)

Transkrypt:

PL/SQL Część 1 Bloki PL/SQL Piotr Medoń

Cele Zapoznanie się z podstawowymi typami PL/SQL Zapoznanie się z blokiem PL/SQL Zapoznanie się z instrukcjami sterującymi wykonaniem 2

Blok PL/SQL Struktura bloku PL/SQL DECLARE deklaracja zmiennych BEGIN instrukcje PL/SQL EXCEPTION obsługa wyjątków END; Elementy wymagalne 3

Blok PL/SQL Blok Hello World BEGIN DBMS_OUTPUT.put_line( Hello World! ); END; 4

Blok PL/SQL Bloki PL/SQL można zagnieżdżać DECLARE BEGIN.. BEGIN DECLARE BEGIN.. END;.. END;.. END; 5

Blok PL/SQL Deklarowanie zmiennych wykonujemy w sekcji deklaracji zmiennych. DECLARE ln_liczba NUMBER; ls_tekst VARCHAR2(200); BEGIN NULL; END; 6

Zmienne Zmienne służą do chwilowego przechowywania danych DECLARE ln_liczba NUMBER; ls_tekst VARCHAR2(200); BEGIN NULL; END; 7

Zmienne DECLARE ls_tekst VARCHAR2(200); BEGIN ls_tekst := Ala ma kota ; ls_tekst := Tosia ma widelec ; dbms_output.put_line (ls_tekst); END; 8

Zmienne DECLARE ls_tekst VARCHAR2(200); ls_tekst1 VARCHAR2(200); BEGIN ls_tekst := Ala ; ls_tekst1 := ls_tekst ma kota dbms_output.put_line (ls_tekst); END; 9

Zmienne --PONIŻSZY KOD ZAKOŃCZY SIĘ BŁĘDEM DECLARE ls_tekst VARCHAR2(200); BEGIN ls_tekst := Ala ; ls_tekst1 := ls_tekst ma kota dbms_output.put_line (ls_tekst); END; 10

Zmienne DECLARE ln_number NUMBER; BEGIN ln_number :=12; ln_number := ln_number + 15; dbms_output.put_line (ln_number); END; 11

Zmienne DECLARE ln_number NUMBER; ln_number1 NUMBER; BEGIN ln_number := 12; ln_number1 := ln_number + 4; ln_number1 := ln_number + 2; ln_number1 := ln_number1 * 2; dbms_output.put_line (ln_number); END; 12

Podstawowe typy danych Tekstowy (VARCHAR2) Numeryczny stałoprzecinkowy oraz zmiennoprzecinkowy (NUMBER) Data (DATE) 13

Podstawowe typy danych VARCHAR2 Przechowuje dane tekstowe do 4000 znaków Wartości w różnych zmiennych mogą mieć różną ilość znaków Deklaracja: nazwa_zmiennej VARCHAR2(maksymalna długość); np. IMIE VARCHAR2(80); 14

Podstawowe typy danych VARCHAR2 Maksymalna długość zmiennej tekstowej zawsze musi być określona podczas deklaracji Tekst w bazie Oracle zapisujemy w apostrofach: 'Ala ma kota' Aby włączyć znak apostrofu do tekstu, należy wykorzystać konstrukcję podwójnego apostrofu: 'Tytuł tej książki to ''Pan Tadeusz''' Każdy podwójny apostrof powyższego tekstu zamieni się na pojedynczy apostrof. Baza Oracle nie rozpoznaje pustego ciągu '' od wartości NULL 15

Podstawowe typy danych NUMBER (zmiennoprzecinkowy) Przechowuje dane numeryczne do 38 znaczących liczb Wartości w różnych rekordach mogą mieć różną ilość znaków Deklaracja: nazwa_zmiennej NUMBER; np. KWOTA NUMBER; 16

Podstawowe typy danych NUMBER (stałoprzecinkowy) Przechowuje dane numeryczne o precyzji zadanej w trakcie deklaracji Deklaracja: nazwa_kolumny NUMBER(całkowita ilość cyfr, ilość miejsc po przecinku) np. KWOTA NUMBER(12,2), oznacza: 10 cyfr przed przecinkiem, 2 cyfry po przecinku 17

Podstawowe typy danych NUMBER (stałoprzecinkowy) c.d. Domyślna ilość miejsc po przecinku to 0 np. NUMBER(10), oznacza: 10 cyfr przed przecinkiem, 0 cyfr po przecinku, czyli liczby całkowite 18

Podstawowe typy danych DATE Przechowuje datę i czas z precyzją do sekund Deklaracja: nazwa_kolumny DATE np. DATA_ZATRUDNIENIA DATE, 19

Podstawowe typy danych DATE Domyślny format daty jest parametrem sesji Stałą datę możemy zapisać w postaci: DATE 2012-03-01 TO_DATE( 2012-03-01 15:13:12, YYYY-MM-DD HH24:MI:SS ) 20

Arytmetyka dat Gdy dodajemy do daty liczbę, Oracle traktuje liczbę jak ilość dni DECLARE ld_date DATE := TRUNC(SYSDATE); BEGIN ld_date := ld_date + 1; dbms_output.put_line( Jutro jest TO_CHAR(ld_date, DD-MM-YYYY ); COMMIT; END; 21

Arytmetyka dat Gdy odejmujemy daty od siebie, Oracle zwraca ilość dni pomiędzy datami: DECLARE ld_birth DATE := DATE 1970-01-01 ; BEGIN dbms_output.put_line( Przeżyłeś już TRUNC(SYSDATE) ld_birth dni ); COMMIT; END; 22

Arytmetyka dat Możemy dodać do daty wartość niecałkowitą. Część ułamkowa będzie potraktowana jako część dnia BEGIN dbms_output.put_line( Za godzinę będzie godzina TO_CHAR( SYSDATE +1/24), hh24:mi ); COMMIT; END; 23

Arytmetyka dat Stosuj odpowiednie metody ADD_MONTHS oraz MONTHS_BETWEEN aby przeprowadzać operacje na miesiącach i latach ld_dzis := TRUNC(SYSDATE); ld_za_miesiac := ADD_MONTHS(ld_dzis, 1); ld_za_rok := ADD_MONTHS(ld_dzis, 12); ln_ilosc_miesiecy := MONTHS_BETWEEN (ld_za_miesiac, ld_za_rok); 24

Blok PL/SQL Domyślnie po zadeklarowaniu zmienne przyjmują wartość NULL. Możemy zmienić inicjalne wartości za pomocą operatora := DECLARE ln_liczba NUMBER := 10; ls_tekst VARCHAR2(200) := Test ; ld_data DATE := DATE 2012-03-01 ; BEGIN NULL; END; 25

Zmienne cd DECLARE ln_liczba NUMBER := 11; ln_liczba1 NUMBER := 16; BEGIN ln_liczba1 :=10; dbms_output.put_line (ln_liczba + ln_liczba1); END; 26

Zmienne cd DECLARE ln_wiek NUMBER := 11; ls_imie VARCHAR2(20) := Ala ; BEGIN ln_wiek :=ln_wiek + 1; dbms_output.put_line (ls_imie ma TO_CHAR(ln_wiek) lat ); END; 27

Blok PL/SQL W bloku PL/SQL można wykonywać instrukcje INSERT/UPDATE/DELETE oraz ROLLBACK/COMMIT BEGIN INSERT INTO nazwa_tabeli VALUES ( ABCABC, sysdate, 1); COMMIT; END; 28

Blok PL/SQL W bloku PL/SQL można wykonywać instrukcje SELECT, na przykład wykorzystując klauzulę INTO <zmienne> przed słowem FROM DECLARE ld_data DATE; ld_za24godziny DATE; BEGIN SELECT SYSDATE, SYSDATE+1 INTO ld_data, ld_za24godziny FROM dual; END; 29

Komentarze Fragmenty kodu nie wykonywane przez interpreter bazy danych Komentarze zapisujemy: od znacznika -- (podwójny myślnik) do końca linii wewnątrz znaczników /* oraz */ null; -- to jest instrukcja, która nic nie robi /* To jest pierwsza linia komentarza To jest druga linia komentarza */ 30

Operacje arytmetyczne Operacja Operator Przykład Wynik Dodawanie + 2+3 5 Odejmowanie - 4-3 1 Mnożenie * 5*6 30 Dzielenie / 8/4 2 Negacja - -4-4 Gdy jeden z parametrów operacji arytmetycznych ma wartość NULL, operacja również zwróci NULL, np: NULL+6 zwróci NULL 31

Operacja przypisania Służy do przypisania wartości zmiennej. Operatorem przypisania jest := ln_liczba := 5+4; ls_tekst := Test ; ls_tekst2 := Te st ; ld_data := SYSDATE; 32

Instrukcje sterowania wykonaniem Instrukcja warunkowa Wykonuje fragment kodu, gdy zadany warunek jest spełniony IF warunek THEN instrukcje wykonywane warunkowo; END IF; Warunek może być spełniony (TRUE), niespełniony (FALSE) lub nieokreślony Gdy warunek jest nieokreślony, instrukcja warunkowa uznaje go za niespełniony 33

Instrukcje sterowania wykonaniem Rozszerzona instrukcja warunkowa IF warunek THEN instrukcje wykonywane warunkowo; ELSE instrukcje wykonywane, gdy warunek niespełniony END IF; 34

Instrukcje sterowania wykonaniem Rozszerzona instrukcja warunkowa IF warunek THEN instrukcje wykonywane warunkowo; ELSIF warunek2 THEN instrukcje wykonywane warunkowo2; ELSE instrukcje wykonywane, gdy żaden z warunków niespełniony END IF; 35

Przykład IF/ELSIF/ELSE/END IF DECLARE ls_dzien_tygodnia varchar2 (1); BEGIN ls_dzien_tygodnia := TO_CHAR (SYSDATE, 'D'); IF ls_dzien_tygodnia = 7' THEN DBMS_OUTPUT.put_line ('Dzis jest sobota'); ELSIF ls_dzien_tygodnia = 1' THEN DBMS_OUTPUT.put_line ('Dzis jest niedziela'); ELSE DBMS_OUTPUT.put_line ('Dzis nie ma weekendu ); END IF; END; 36

Zagnieżdżone instrukcje warunkowe IF warunek1 THEN IF warunek2 THEN IF warunek3 THEN instrukcje1; ELSE instrukcje2; END IF; ELSIF warunek4 instrukcje3; END IF; ELSE instrukcje4; END IF; 37

Operatory porównań Poniższe operatory zwracają wartość określoną TRUE lub FALSE, gdy oba argumenty nie są wartościami NULL Gdy jeden z argumentów jest NULL, operator zwróci wartość nieokreślony Warunek Operator Przykład równość = a=b większe od mniejsze od większe równe mniejsze równe > < >= <= nierówność!= <> a>b a<b a>=b a<=b a!=b a<>b pomiędzy BETWEEN.. AND a BETWEEN b AND c 38

Warunki Wszystkie operatory są przeciążone i działają na typach dat, tekstowych oraz numerycznych Typ danych Warunek Prawda, gdy Liczby x>y x jest większe od y Tekst a>b a jest dalej w alfabecie od b Daty d1>d2 d1 jest późniejsza niż d2 39

Warunki Przykłady porównań Warunek Wynik 3<=5 Prawda g > z Fałsz Ula <= Ula Prawda Test123 > Test Prawda DATE 01-01-2011 > DATE 01-01-2013 Fałsz 2>NULL Nieokreślony NULL=NULL Nieokreślony b <>NULL Nieokreślony 40

Warunki Warunki sprawdzające wartość NULL Warunki te zawsze zwracają TRUE albo FALSE Warunek Operator Przykład Czy zmienna ma wartość NULL Czy zmienna nie ma wartości NULL IS NULL IS NOT NULL a IS NULL a IS NOT NULL IF ld_data_konca IS NOT NULL THEN dbms_output.put_line( Projekt skonczony ); END IF; 41

Złożone warunki Złożone warunki tworzymy wykorzystując operatory logiczne NOT, AND, OR Kolejność wykonywania operatorów jest następująca: NOT, AND, OR przykład: IF stan= panna AND uroda=true OR stan= zamężna OR stan= wdowa AND NOT oszczednosci<10000 THEN 42

Operacje logiczne w PL/SQL Operacja Operator Przykład Wynik Koniunkcja (i) AND TRUE AND TRUE TRUE AND FALSE FALSE AND FALSE TRUE AND NULL FALSE AND NULL NULL AND NULL Alternatywa (lub) OR TRUE OR TRUE TRUE OR FALSE FALSE OR FALSE TRUE OR NULL FALSE OR NULL NULL OR NULL Negacja (nie) NOT NOT TRUE NOT FALSE NOT NULL TRUE FALSE FALSE NULL FALSE NULL TRUE TRUE FALSE TRUE NULL NULL FALSE TRUE NULL 43

Instrukcja warunkowa DECLARE ln_liczba NUMBER := 5; BEGIN IF ln_liczba = 5 THEN dbms_output.put_line ( Mamy piątkę! ); END IF; END; 44

Instrukcja warunkowa DECLARE ln_liczba NUMBER := 2; BEGIN ln_liczba := ln_liczba + 2; IF ln_liczba = 5 THEN dbms_output.put_line ( Mamy piątkę! ); END IF; END; 45

Instrukcja warunkowa DECLARE ln_wiek NUMBER := 11; ls_akcja VARCHAR2(20):= Urodziny ; BEGIN IF ls_akcja = Urodziny THEN ln_wiek :=ln_wiek + 1; END IF; dbms_output.put_line ( Ola ma TO_CHAR(ln_wiek) lat ); END; 46

Instrukcje sterowania wykonaniem Pętla LOOP/END LOOP Pętla powtarza instrukcje zawarte pomiędzy instrukcjami LOOP oraz END LOOP LOOP instrukcje; END LOOP; 47

Instrukcje sterowania wykonaniem Warunki końca pętli LOOP/END LOOP: instrukcja EXIT LOOP instrukcje1; IF warunek_końca1 THEN EXIT; END IF; instrukcje2; EXIT WHEN warunek_końca2; instrukcje3; END LOOP; 48

Instrukcje sterowania wykonaniem Przykład pętli LOOP/END LOOP: declare ln_liczba NUMBER := 1; begin loop dbms_output.put_line(ln_liczba); exit when ln_liczba > 10; ln_liczba := ln_liczba + 1; end loop; end; 49

Instrukcje sterowania wykonaniem Numeryczna pętla FOR Pętla powtarza instrukcje zawarte pomiędzy instrukcjami LOOP oraz END LOOP dla każdej wartości zmienne spomiędzy zadanego przydziału wartość początkowa musi być mniejsza niż wartość końcowa, w przeciwnym wypadku instrukcje nie wykonają się ani razu FOR zmienna IN wartość_początkowa..wartość_końcowa LOOP instrukcje; END LOOP; 50

Instrukcje sterowania wykonaniem Przykład numerycznej pętli FOR BEGIN FOR i IN 1.. 10 LOOP DBMS_OUTPUT.put_line ( 'Petla wykonuje się po raz ' TO_CHAR(i) ); END LOOP; END; 51

Instrukcje sterowania wykonaniem Przykład numerycznej pętli FOR DECLARE ln_ilosc NUMBER := 15; BEGIN FOR i IN 1.. ln_ilosc LOOP DBMS_OUTPUT.put_line ( 'Petla wykonuje się po raz ' TO_CHAR(i) ); END LOOP; END; 52

Instrukcje sterowania wykonaniem Przykład numerycznej pętli FOR DECLARE ln_od NUMBER := 10; ln_do NUMBER := 15; BEGIN FOR i IN ln_od..ln_do LOOP DBMS_OUTPUT.put_line (TO_CHAR(i)); END LOOP; END; 53

Instrukcje sterowania wykonaniem Numeryczna pętla FOR za pomocą słowa REVERSE możemy zmienić kolejność iterowania na odwrotną. również w tym przypadku wartość początkowa musi być mniejsza niż wartość końcowa FOR zmienna IN REVERSE wartość_początkowa..wartość_końcowa LOOP instrukcje; END LOOP; 54

Instrukcje sterowania wykonaniem Przykład numerycznej pętli FOR iterowanej od końca BEGIN FOR i IN REVERSE 1.. 5 LOOP DBMS_OUTPUT.put_line ( 'Pozostalo jeszcze ' i ' godzin do konca dnia' ); END LOOP; END; 55

Instrukcje sterowania wykonaniem Instrukcja CONTINUE Powoduje przerwanie bieżącej iteracji pętli i uruchomienie kolejnej iteracji pętli LOOP instrukcje1; IF warunek1 THEN CONTINUE; END IF; instrukcje2; EXIT WHEN warunek_końca2; END LOOP; 56

Instrukcje sterowania wykonaniem Przykład wykorzystania instrukcji CONTINUE BEGIN FOR i IN 1.. 10 LOOP CONTINUE WHEN MOD (i, 2) = 1; DBMS_OUTPUT.put_line (TO_CHAR (i) ' jest parzyste'); END LOOP; END; / 57

Błędy PL/SQL Błędy składni Blok danych jest napisany niezgodnie ze składnią języka PL/SQL Błąd jest generowany przed wykonaniem pierwszej instrukcji 58

Błędy PL/SQL Naprawa błędów składni W przypadku błędu składni interpreter zwraca numery linii, w których są błędy Jeżeli stwierdzimy, ze linia ta jest poprawna należy sprawdzić linię wcześniejszą Jeden błąd składni może wygenerować kolejne błędy, dlatego warto naprawić tylko pierwszy błąd i spróbować uruchomić blok ponownie Jeżeli mimo powyższych operacji nie pozbyliśmy się błędu, należy zakomentować fragmenty kodu generujące błędy 59

Błędy PL/SQL Błędy czasu uruchomienia (logiczne) Podczas wykonywania programu interpreter natknął się na błąd Interpreter podnosi wyjątek związany z błędem 60

Błędy PL/SQL Naprawa błędów logicznych Baza danych Oracle umożliwia debug owanie programów Stosuj DBMS_OUTPUT.PUT_LINE, aby wypisać wartości zmiennych 61