OBSŁUGA WYJĄTKÓW. Mechanizm języka PL/SQL. Wyjątki:

Wielkość: px
Rozpocząć pokaz od strony:

Download "OBSŁUGA WYJĄTKÓW. Mechanizm języka PL/SQL. Wyjątki:"

Transkrypt

1 OBSŁUGA WYJĄTKÓW W języku PL/SQL zaimplementowano obsługę błędów za pomocą: mechanizmu wyjątków programów obsługi wyjątków w tzw. sekcji obsługi wyjątków. Wyjątki mogą być związane z: błędami systemu Oracle błędami zdefiniowanymi przez użytkownika. Tak zaprojektowany, funkcjonujący w ramach danego programu mechanizm zapewnia, że wszelkie błędy będą usuwane i naprawiane w optymalny sposób. Wyjątki w języku PL/SQL są podobne do wyjątków w języku Java. Przykładowo, wyjątki Javy są zgłaszane i wykrywane w taki sam sposób jak w PL/SQL-u. Jednak inaczej niż w Javie wyjątki w języku PL/SQL nie są obiektami i nie można dla nich definiować metod. Należy sobie odpowiedzieć na pytanie, jakiego rodzaju błędy mogą wystąpić w programie PL/SQL. Błędy można klasyfikować zgodnie z zasadami przyjętymi w poniższej tabeli. Typ błędu Zgłaszany przez Obsługa Występujący podczas kompilacji programu Występujący podczas wykonywania programu Wyjątki: Kompilator PL/SQL Mechanizm języka PL/SQL Interaktywna kompilator zgłasza błędy, a programista musi je poprawić Programowa wyjątki są zgłaszane i przechwytywane przez programy obsługi wyjątków są przeznaczone do obsługi błędów powstających podczas wykonywania programu, nie obsługują tych pojawiających się podczas kompilacji, bowiem wówczas te błędy są wykrywane przez mechanizm języka PL/SQL i zgłaszane użytkownikowi program nie może ich obsłużyć, ponieważ nie jest jeszcze uruchomiony. Przykładowo poniższy blok, w którym nieprawidłowo podano identyfikator Ttowary w instrukcji SELECT z_liczbaproduktów NUMBER; SELECT COUNT(*) INTO z_liczbaproduktow FROM ttowary; spowoduje powstanie błędu kompilacji: PLS-201: identyfikator TTOWARY musi być zadeklarowany 1

2 Wyjątki i programy obsługi wyjątków są metodami reakcji i sposobu postępowania programu w sytuacji wystąpienia błędów podczas wykonywania programu. Do błędów występujących podczas wykonywania programu zalicza się błędy SQL, takie jak: ORA-1: naruszono więzy unikatowe oraz błędy proceduralne ORA-06502: PL/SQL: błąd wartości lub numeryczny Po wystąpieniu błędu następuje zgłoszenie wyjątku. Wyjątek powoduje przekazanie sterowania do bloku obsługi wyjątków, który jest oddzielną sekcją programu. Taki sposób organizacji kodu zapewnia oddzielenie obsługi błędów od reszty programu, co ułatwia zrozumienie logiki programu i zapewnia, że wszystkie błędy zostaną wykryte. W przypadku języka, który nie stosuje modelu wyjątków do obsługi błędów (np. język C), w celu zapewnienia prawidłowej obsługi błędów we wszystkich przypadkach jest konieczne wstawienie kodu obsługi błędów, co ilustruje poniższy przykład: int x, y, z f(x); /* wywołanie funkcji, przekazanie x jako argumentu */ if <wystapil błąd> obsluga błędu(...); y=1/z; if <wystapil błąd> obsluga błędu(...); z=x+y if <wystapil błąd> obsluga błędu(...); Porównajmy poprzedni przykład z analogicznym fragmentem programu, tym razem zapisanym w języku PL/SQL: x NUMBER; y NUMBER; z NUMBER; f(x); y:=1/z; z:=x+y WHEN OTHERS THEN /* Program obsługi wykonywany dla wszystkich błędów */ program_obsługi_błedow(...) END 2

3 Należy zwrócić uwagę, że sekcja obsługi błędów jest oddzielona od reszty programu. Takie rozwiązanie zabezpiecza przed następującymi problemami, pojawiającymi się w programach utworzonych w języku C: Łatwiej można zrozumieć założenia programu, ponieważ jego poszczególne elementy są w logiczny sposób wyodrębnione. Niezależnie od tego, której instrukcji wykonanie się nie powiedzie, program wykryje i obsłuży błąd. Wynika to z faktu, iż program nie będzie kontynuował swego działania od instrukcji, która spowodowała błąd. Sterowanie zostanie przekazane do programu obsługi wyjątków, a następnie do bloku zewnętrznego. Deklarowanie wyjątków Wyjątki są: deklarowane w sekcji deklaracji bloku, zgłaszane w sekcji wykonania obsługiwane w sekcji wyjątków. Istnieją dwa typy wyjątków: definiowane przez użytkownika predefiniowane. Wyjątki definiowane przez użytkownika Wyjątek zdefiniowany przez użytkownika jest błędem określanym przez programistę podczas tworzenia programu. Błąd, który jest związany z takim wyjątkiem, niekoniecznie jest błędem systemu Oracle, np. może być błędem związanym z danymi. Wyjątki predefiniowane są związane z powszechnie występującymi błędami języków SQL i PL/SQL. Wyjątki zdefiniowane przez użytkownika są deklarowane w sekcji deklaracji bloku PL/SQL. Podobnie jak zmienne wyjątki te posiadają swój typ () oraz zakres, np.: w_zbytduzoproduktowwycofanych ; gdzie w_zbytduzoproduktowwycofanych jest identyfikatorem widocznym aż do końca danego bloku. Należy zwrócić uwagę, że zakres wyjątku jest taki sam jak zakres każdej innej zmiennej lub kursora w tej samej sekcji deklaracji. Wyjątki predefiniowane W języku PL/SQL istnieje pewna liczba predefiniowanych wyjątków, które odpowiadają najczęściej występującym błędom systemu Oracle. Ponieważ identyfikatory dla tych wyjątków są zdefiniowane w pakiecie STANDARD, dlatego wyjątki predefiniowane są dostępne bezpośrednio do wykorzystania w programie nie jest konieczne ich deklarowanie w sekcji deklaracji, jak w przypadku wyjątków zdefiniowanych przez użytkownika. 3

4 W poniższej tabeli opisano niektóre najpopularniejsze błędy obsługiwane w systemie Oracle. Wyjątki predefiniowane w języku PL/SQL Błąd Oracle Nazwa wyjątku Objaśnienie ORA-0001 DUP_VAL_ON_INDEX Naruszono ograniczenie unikalności. Ten wyjątek pojawia się w wyniku próby umieszczenia rekordu w tabeli z określonym kluczem głównym, gdy wstawiany rekord będzie powodował zduplikowanie wartości klucza już istniejącego w tabeli ORA-0051 TIMEOUT_ON_RESOURCE Podczas oczekiwania na zwolnienie zasobów nastąpiło przekroczenie limitu czasu ORA-0061 TRANSACTION_BACKED_OUT Transakcja wycofana z powodu zakleszczenia ORA-1001 INVALID_CURSOR Nieprawidłowa operacja kursora ORA-1012 NOT_LOGGED_ON Brak połączenia z bazą Oracle ORA-1017 LOGIN_DENIED Nieprawidłowa nazwa użytkownika lub nieprawidłowe hasło. ORA-1403 NO_DATA_FOUND Nie odnaleziono danych. Jeśli instrukcja SELECT nie zwróci żadnego wiersza, wystąpi ten błąd. Zazwyczaj pojawia się w przypadku wybrania kursora niejawnego i wykonania instrukcji SELECT INTO. ORA-1410 SYS_INVALID_ROWID Konwersja do uniwersalnego identyfikatora rowid nie powiodła się. ORA-1422 TOO_MANY_ROWS Wyjątek pojawia się w przypadku, gdy instrukcja SELECT INTO która powinna zwracać jeden wiersz, zwraca ich więcej. ORA-1476 ZERO_DIVIDE Dzielenie przez zero. ORA-1722 INVALID_NUMBER Konwersja do wartości liczbowej nie powiodła się. ORA-6500 STORAGE_ERROR Brak wystarczającej ilości pamięci podczas wykonywania operacji PL/SQL powoduje wystąpienie wewnętrznego błędu PL/SQL. ORA-6501 PROGRAM_ERROR Błąd wewnętrzny PL/SQL. ORA-6504 ROWTYPE_MISMATCH Zmienna kursora hosta oraz zmienna kursora PL/SQL mają niezgodne typy. ORA-6502 VALUE_ERROR Błąd arytmetyczny (obcięcia lub konwersji). Ten błąd powstaje w wyniku podjęcia próby umieszczenia wartości zmiennej, gdy zmienna jest niezgodnego typu (np. próba umieszczenia tekstu w polu liczbowym) albo wartość jest zbyt duża (np. umieszczenie wartości tekstowej o długości przekraczającej długość zadeklarowanej zmiennej) ORA CURSOR_ALREADY_OPEN Próba otwarcia już otwartego kursora. ORA-6530 ACCESS_INTO_NULL Próba przypisania wartości atrybutom niezainicjowanego (o wartości NULL) obiektu. ORA-6531 COLLECTION_IS_NULL Próba zastosowania metod kolekcji innych niż EXISTS do niezainicjowanej (o wartości NULL) tabeli PL/SQL lub tablicy VARRAY. ORA-6532 SUBSCRIPT_OUTSIDE_LIMIT Odwołanie do indeksu tabeli zagnieżdżonej lub indeksu tablicy VARRAY na zewnątrz deklarowanego zakresu (np.-1) ORA-6533 SUBSCRITP_BEYOND_COUNT Odwołanie do do indeksu tabeli zagnieżdżonej lub indeksu tablicy VARRAY większego niż liczba elementów w kolekcji. ORA_65-92 CASE_NOT_FOUND W instrukcji CASE nie znaleziono klauzuli WHEN spełniającej warunek. ORA SELF_IS_NULL Próba wywołania metody dla egzemplarza obiektu o wartości NULL. 4

5 Zgłaszanie wyjątków. W każdym przypadku, gdy podczas wykonywania programu w języku PL/SQL występuje błąd, program sprawdza, czy użytkownik przygotował odpowiednie zabezpieczenia na taką ewentualność. Sprawdzając sekcję wyjątków program weryfikuje, czy wystąpienie problemu było przewidywane. System Oracle zawiera wbudowane pewne mechanizmy obsługi wyjątków. W przypadku konieczności obsługi błędu, którego jeszcze nie uwzględniono w danym systemie Oracle, można utworzyć wyjątek zdefiniowany przez użytkownika. Po wystąpieniu błędu związanego z pewnym wyjątkiem następuje zgłoszenie tego wyjątku Wyjątki zdefiniowane przez użytkownika są zgłaszane jawnie przez instrukcję RAISE, podczas gdy wyjątki predefiniowane (lub zdefiniowane przez użytkownika za pomocą dyrektywy pragma _INIT, związane z błędami systemu Oracle) są zgłaszane niejawnie, w razie wystąpienia skojarzonych z nimi błędów systemu Oracle. Jeżeli wystąpi błąd, który nie został skojarzony z żadnym z wyjątków, to także zgłaszany jest wyjątek. Może on być przechwycony przez program obsługi wyjątku OTHERS. Błąd Oracle Nazwa wyjątku Objaśnienie Nieokreślony OTHERS -- Wyjątek do wskazania błędu w_zbytduzoproduktowwycofanych ; -- Bieżąca liczba produktów wycofanych w_biez_l_produktow NUMBER(3); -- Maksymalna liczba produktów wycofanych z_maks_l_produktow NUMBER(3); Ten wyjątek służy do przechwytywania wszelkich błędów nieobsługiwanych przez programy obsługi określonych wyjątków. Warto zwrócić uwagę, iż ten program obsługi błędów musi być zawsze umieszczony na końcu, ponieważ system Oracle nie obsługuje żadnych wyjątków następujących po tym programie. /* Odszukanie bieżącej liczby produktów wycofanych oraz maksymalnej liczby produktów wycofanych */ SELECT biez_l_produktow, maks_l_produktow INTO z_biez_l_produktow, z_maks_l_produktow FROM towary WHERE wycofany = Tak ; /* Sprawdzenie liczby produktów wycofanych, czy nie przekracza ustalonej maksymalnej liczby produktów wycofanych */ IF z_biez_l_produktow z_maks_l_produktow THEN -- Za dużo produktów wycofanych zgłoszenie wyjątku RAISE w_zbytduzoproduktowwycofanych; END IF; 5

6 Po zgłoszeniu wyjątku sterowanie jest natychmiast przekazywane do sekcji obsługi wyjątków danego bloku. Jeżeli sekcja wyjątków w danym bloku nie istnieje, wyjątek jest propagowany do bloku obejmującego. Po przekazaniu sterowania do programu obsługi wyjątków nie ma możliwości powrotu do sekcji wykonywania bloku. Sytuację tę ilustruje poniższy rysunek. Tutaj jest deklarowany wyjątek A. A ;... RAISE A; Tutaj jest wywoływany wyjątek A. Każdy kod, który tutaj występuje, nie jest wykonywany. WHEN A THEN Sterowanie jest przekazywane do programu obsługi wyjątków. Kod, który tutaj występuje, będzie wykonany. Rys 1. Przekazanie sterowania do programu obsługi wyjątków Wyjątki predefiniowane są zgłaszane automatycznie w razie wystąpienia związanego z nimi błędu systemu Oracle, np. poniższy blok PL/SQL wywołuje wyjątek DUP_VAL_ON_INDEX: INSERT INTO Towary(nr, nazwa, cena_jedn) VALUES (1002, Czekolada mleczna, 2,70); INSERT INTO Towary(nr, nazwa, cena_jedn) VALUES (1002, Czekolada deserowa, 2,10); Zgłoszenie wyjątku nastąpiło ze względu na to, iż kolumna nr tabeli towary stanowi klucz główny i dlatego zdefiniowano na niej ograniczenie unikalności. W razie próby wstawienia nowej wartości 1002 do kolumny nr przez kolejną instrukcję INSERT następuje wywołanie następującego błędu: ORA-0001: naruszono więzy unikatowe Powyższy błąd odpowiada wyjątkowi DUP_VAL_ON_INDEX. Obsługa wyjątków Po zgłoszeniu wyjątku sterowanie jest przekazywane do sekcji obsługi wyjątków bloku, którą to sytuację przedstawia powyższy rysunek. Sekcja obsługi wyjątków składa się z programu obsługi niektórych lub 6

7 wszystkich wyjątków. Program ten zawiera kod, który jest wykonywany w razie wystąpienia błędu skojarzonego z danym wyjątkiem i jeśli dany wyjątek zostanie zgłoszony. Składnię sekcji obsługi wyjątków pokazano poniżej: WHEN nazwa_wyjątku THEN 1_sekwencja_instrukcji WHEN nazwa_wyjątku THEN 2_sekwencja_instrukcji WHEN OTHERS THEN 3_sekwencja_instrukcji Każdy program obsługi wyjątków składa się z klauzuli WHEN oraz instrukcji, które będą wykonywane po zgłoszeniu wyjątku. Klauzula WHEN służy do określenia, który wyjątek ma być obsługiwany przez dany program obsługi. Poniżej przedstawiona zostanie kontynuacja poprzedniego przykładu: -- Wyjątek do wskazania błędu w_zbytduzoproduktowwycofanych ; -- Bieżąca liczba produktów wycofanych w_biez_l_produktow NUMBER(3); -- Maksymalna liczba produktów wycofanych z_maks_l_produktow NUMBER(3); /* Odszukanie bieżącej liczby produktów wycofanych oraz maksymalnej liczby produktów wycofanych */ SELECT biez_l_produktow, maks_l_produktow INTO z_biez_l_produktow, z_maks_l_produktow FROM stan_produkty WHERE wycofany = Tak ; /* Sprawdzenie liczby produktów wycofanych, czy nie przekracza ustalonej maksymalnej liczby produktów wycofanych */ IF z_biez_l_produktow z_maks_l_produktow THEN -- Za dużo produktów wycofanych zgłoszenie wyjątku RAISE w_zbytduzoproduktowwycofanych; END IF; WHEN w_zbytduzoproduktowwycofanych THEN 7

8 /*Program obsługi jest wykonywany, jeśli bieżąca liczba produktów wycofanych przekracza ustaloną maksymalną liczbę tych produktów. Wprowadzona zapis do dziennika, który zapisuje ten fakt */ INSERT INTO dziennik_błędów(informacja, data_informacji) VALUES ( Bieżąca liczba produktów wycofanych z_biez_l_produktow przekracza ustalona maksymalną liczbę tych produktów z_maks_l_produktow, SYSDATE); Jeden program obsługi może być również wykonywany dla więcej niż jednego wyjątku. W tym celu należy po prostu wykazać w klauzuli WHEN nazwy wyjątków oddzielone od siebie słowem kluczowym OR, jak w poniższym przykładzie: WHEN NO_DATA_FOUND OR TOO_MANY_ROWS THEN INSERT INTO dziennik_błędów(informacja) VALUES ( Wystąpił błąd instrukcji SELECT ); Inaczej niż w języku Java sekcja wyjątków bloku może zawierać programy obsługi dla wyjątków, które nie zostały zgłoszone w sekcji wykonania oraz może nie obsługiwać wyjątków zgłoszonych w sekcji wykonania. Kompilator języka PL/SQL pod tym względem nie sprawdza poprawności sekcji wyjątków. Określony wyjątek może być obsłużony przez co najwyżej jeden program obsługi wyjątków w sekcji wykonania. Jeśli istnieje więcej programów obsługi dla wyjątku, kompilator języka PL/SQL zgłosi błąd PLS-483, co ilustruje poniższa sesja programu SQL*Plus: -- Zadeklarowanie 2 wyjątków definiowanych przez użytkownika: w_wyjatek1 ; w_wyjatek2 ; -- Zgłoszenie wyjątku w_wyjatek1 RAISE w_wyjatek1 WHEN w_wyjatek2 THEN INSERT INTO dziennik_bledow(informacja) VALUES ( wykonano pierwszy program obsługi wyjątków ); WHEN w_wyjatek1 THEN INSERT INTO dziennik_bledow (informacja) VALUES ( wykonano drugi program obsługi wyjątków ); WHEN w_wyjatek1 OR w_wyjatek2 THEN INSERT INTO dziennik_bledow (informacja) VALUES ( wykonano trzeci program obsługi wyjątków ); 8

9 WHEN w_wyjatek1 OR w_wyjatek2 THEN * BŁĄD w linii 15 ORA-06550: linia 15, kolumna 7 PLS-00483: wyjątek W_WYJATEK2 może się znaleźć w co najwyżej jednej obsłudze wyjątków w tym bloku. ORA-06550: linia 0, kolumna 0 PL/SQL: Przerwano proces analizy modułów w czasie kompilacji Klauzula obsługi wyjątku OTHERS W języku PL/SQL występuje specjalna klauzula obsługi wyjątków WHEN OTHERS. Klauzula ta będzie wykonywana dla wszystkich zgłaszanych wyjątków, których nie obsłużono w pozostałych klauzulach WHEN w bieżącej sekcji wyjątków. Powinna ona być zawsze ostatnią klauzulą obsługi błędów w bloku tak, aby wszystkie poprzednie (bardziej szczegółowe) klauzule obsługi błędów były wcześniej sprawdzone. Klauzula WHEN OTHERS obsłuży wszystkie rodzaje wyjątków, niezależnie od tego czy są one predefiniowane, czy też zdefiniowane przez użytkownika. Do dobrej praktyki programistycznej zalicza się uwzględnianie klauzuli obsługi wyjątków OTHERS na najwyższym poziomie programu (blok najbardziej zewnętrzny) w celu zapewnienia wykrywania wszystkich błędów. W innym przypadku błędy będą propagowane do środowiska wywołania. Może to spowodować niepożądane efekty, jak np. wycofanie bieżącej transakcji. Poniżej przedstawiono kontynuację rozpoczętego wcześniej przykładu. -- Wyjątek do wskazania błędu w_zbytduzoproduktowwycofanych ; -- Bieżąca liczba produktów wycofanych w_biez_l_produktow NUMBER(3); -- Maksymalna liczba produktów wycofanych z_maks_l_produktow NUMBER(3); -- Odszukanie bieżącej liczby produktów wycofanych oraz maksymalnej liczby produktów wycofanych SELECT biez_l_produktow, maks_l_produktow INTO z_biez_l_produktow, z_maks_l_produktow FROM stan_produkty WHERE wycofany = Tak ; /* Sprawdzenie liczby produktów wycofanych, czy nie przekracza ustalonej maksymalnej liczby produktów wycofanych */ IF z_biez_l_produktow z_maks_l_produktow THEN -- Za dużo produktów wycofanych zgłoszenie wyjątku RAISE w_zbytduzoproduktowwycofanych; END IF; WHEN w_zbytduzoproduktowwycofanych THEN 9

10 /*Program obsługi jest wykonywany, jeśli bieżąca liczba produktów wycofanych przekracza ustaloną maksymalną liczbę tych produktów. Wprowadzona zapis do dziennika, który zapisuje ten fakt*/ INSERT INTO dziennik_bledow(informacja, data_informacji) VALUES ( Bieżąca liczba produktów wycofanych z_biez_l_produktow przekracza ustalona maksymalną liczbę tych produktów z_maks_l_produktow, SYSDATE); WHEN OTHERS THEN -- Klauzula obsługi wykonywana dla wszystkich innych błędów INSERT INTO dziennik_bledow(informacja, data_informacji) VALUES ( Wystąpił inny błąd, SYSDATE); Klauzula obsługi błędów OTHERS, przedstawiona w powyższym przykładzie, jedynie zapisuje fakt wystąpienia błędu, jednak bez wskazania jego rodzaju. Dzięki predefiniowanym funkcjom SQLCODE oraz SQLERRM, można określić rodzaj błędu wywołującego wyjątek. Nie należy definiować klauzuli obsługi wyjątków w postaci WHEN OTHERS THEN NULL; ponieważ spowoduje to przechwytywanie nieoczekiwanych błędów bez ich rejestrowania. Dobry program obsługi wyjątków OTHERS zarejestruje błąd, a także dodatkowe informacje, pozwalające na późniejszą analizę sytuacji. Funkcje SQLCODE oraz SQLERRM Wewnątrz klauzuli obsługi OTHERS warto uwzględnić zapewnienie dostępu do informacji, który błąd Oracle spowodował zgłoszenie określonego wyjątku, niezależnie od tego, czy z błędem jest związany wyjątek predefiniowany, czy też nie. Jednym z powodów jest zarejestrowanie rodzaju błędu, a nie tylko faktu jego zaistnienia. Znajomość rodzaju zaistniałego błędu sprzyja określeniu odpowiednich operacji, które powinny zostać wykonane. Język PL/SQL umożliwia uzyskiwanie takich informacji za pomocą dwóch wbudowanych funkcji: SQLCODE oraz SQLERRM. Funkcja SQLCODE zwraca bieżący kod błędu, a funkcja SQLERRM zwraca tekst komunikatu o bieżącym błędzie. Dla wyjątków zdefiniowanych przez użytkownika funkcja SQLCODE zwraca wartość1, natomiast funkcja SQLERRM komunikat User-defined Exception (wyjątek zdefiniowany przez użytkownika). Poniżej podano zapis całości bloku PL/SQL, który dotąd był analizowany. Warto przeanalizować budowę kompletnej klauzuli obsługi wyjątków OTHERS. -- Wyjątek do wskazania błędu w_zbytduzoproduktowwycofanych -- Bieżąca liczba produktów wycofanych w_biez_l_produktow NUMBER(3); -- Maksymalna liczba produktów wycofanych z_maks_l_produktow NUMBER(3); -- Kod oraz tekst innych błędów wykonania z_kodbledu dziennik_błędów.kod%type; z_komunikatbledu dziennik_błędów.komunikat%type; 10

11 /* Odszukanie bieżącej liczby produktów wycofanych oraz maksymalnej liczby produktów wycofanych */ SELECT biez_l_produktow, maks_l_produktow INTO z_biez_l_produktow, z_maks_l_produktow FROM stan_produkty WHERE wycofany = Tak ; /* Sprawdzenie liczby produktów wycofanych, czy nie przekracza ustalonej maksymalnej liczby produktów wycofanych */ IF z_biez_l_produktow z_maks_l_produktow THEN -- Za dużo produktów wycofanych zgłoszenie wyjątku RAISE w_zbytduzoproduktowwycofanych; END IF; WHEN w_zbytduzoproduktowwycofanych THEN /*Program obsługi jest wykonywany, jeśli bieżąca liczba produktów wycofanych przekracza ustaloną maksymalną liczbę tych produktów. Wprowadzona zapis do dziennika, który zapisuje ten fakt*/ INSERT INTO dziennik_błędów(informacja, data_informacji) VALUES ( Bieżąca liczba produktów wycofanych z_biez_l_produktow przekracza ustalona maksymalną liczbę tych produktów z_maks_l_produktow, SYSDATE); WHEN OTHERS THEN -- Klauzula obsługi wykonywana dla wszystkich innych błędów z_kodbledu:=sqlcode; z_komunikatbledu:=substr(sqlerrm,1,200); -- Należy zwrócić uwagę na zastosowanie w tym miejscu funkcji SUBSTR INSERT INTO dziennik_bledow(kod, komunikat, informacja, data_informacji) VALUES (z_kodbledu, z_komunikatbledu, Wystąpił błąd Oracle,SYSDATE); Maksymalna długość komunikatu o błędzie wynosi 512 znaków. W powyższym przykładzie zmienna z_komunikabledu ma długość tylko 200 znaków (w celu dopasowania do pola kod tabeli dziennik_bledow). Jeżeli tekst komunikatu o błędzie jest dłuższy niż 200 znaków, to samo przypisanie: z_komunikatbledu:= SQLERRM; spowoduje zgłoszenie wyjątku predefiniowanego VALUE_ERROR. Aby tego uniknąć, należy użyć wbudowanej funkcji SUBSTR w celu zapewnienia, że zmiennej z_komunikatbledu zostanie przypisanych najwyżej 200 znaków tekstu komunikatu o błędzie. Należy zwrócić uwagę, że funkcje SQLCODE i SQLERRM są najpierw przypisywane do zmiennych lokalnych. Zmienne te są następnie stosowane w instrukcji SQL. Funkcje te są proceduralne, a zatem nie można ich wykorzystać bezpośrednio w instrukcji SQL. 11

12 Funkcja SQLERRM może być również wywołana z pojedynczym argumentem liczbowym. W takim przypadku funkcja zwraca tekst skojarzony z liczbą. Powyższy argument powinien być zawsze liczbą ujemną. Jeżeli funkcja SQLERRM jest wywoływana z wartością równą zeru, to następuje zwrócenie następującego komunikatu: ORA-0000: normal, successful completion (normalne, udane zakończenie operacji) Jeżeli funkcja SQLERRM jest wywoływana z dodatnią wartością różną od +100, następuje zwrócenie komunikatu: non-oracle Exception ( wyjątek nie jest wyjątkiem systemowym Oracle) Funkcja SQLERRM(100) zwraca: ORA-1403: no data found (nie znaleziono danych) Funkcja SQLCODE wywołana z klauzuli obsługi wyjątków zwraca wartość ujemną oznaczającą błąd systemu Oracle. Odstępstwem od tej reguły jest błąd ORA-1403: no data found (nie znaleziona danych), kiedy funkcja SQLCODE zwraca wartość równą +100 (100 odpowiada kodowi ANSI błędu NO DATA FOUND BRAK DANYCH). Funkcja SQLERRM (bez żadnych argumentów) wywołana z sekcji wykonania bloku zwraca zawsze: ORA-0000: normalne, udane zakończenie Natomiast funkcja SQLCODE zwraca 0. Wszystkie opisywane sytuacje są przedstawione w poniższej przykładowej sesji programu SQL*Plus. SQL> 2. DBMS_OUTPUT.PUT_LINE( SQLERRM(0): SQLERRM(0)); 3. DBMS_OUTPUT.PUT_LINE( SQLERRM(100): SQLERRM(100)); 4. DBMS_OUTPUT.PUT_LINE( SQLERRM(10): SQLERRM(10)); 5. DBMS_OUTPUT.PUT_LINE( SQLERRM: SQLERRM); 6. DBMS_OUTPUT.PUT_LINE( SQLERRM(-1): SQLERRM(-1); 7. DBMS_OUTPUT.PUT_LINE( SQLERRM(-54): SQLERRM(54); / SQLERRM(0): ORA-000: normal, successful completion SQLERRM(100): ORA-01403: no data found SQLERRM(10): -10: non-oracle exception SQLERRM: ORA-000: normal, successful completion SQLERRM(-1): ORA-00001: unique constraint(.) violated SQLERRM(-54): ORA-00054: resource busy and acquire with NOWAIT specified PL/SQL procedure successfully completed 12

13 Zazwyczaj bardziej użytecznym sposobem zastosowania funkcji SQLERRM niż z przekazywanym parametrem (jak np. za pomocą funkcji SQLCODE) jest zastosowanie jej bez parametrów. Taka wersja zwraca pełny komunikat o błędzie z zastąpionymi wszystkimi ciągami znaków, np. nazwę ograniczenia w przypadku błędu ORA-1 w poprzednim przykładzie. Zastosowanie funkcji RAISE_APPLICATION_ERROR W celu tworzenia własnych komunikatów o błędzie można stosować wbudowaną funkcję RAISE_APPLICATION_ERROR. Własne komunikaty mogą być bardziej opisowe niż nazwane wyjątki. Błędy zdefiniowane przez użytkownika są przekazywane do środowiska wywołującego w ten sam sposób, w jaki przekazywane są błędy Oracle. Składnia funkcji RAISE_APPLICATION_ERROR jest następująca: RAISE_APPLICATION_ERROR(numer_bledu, komunikat_o_bledzie, [zachowanie_bledow]); gdzie numer_bledu jest parametrem o wartości z przedziału od do , komunikat_o_bledzie jest tekstem skojarzonym z tym błędem długość parametru komunikat_o_bledzie nie może przekraczać 512 znaków. zachowanie_bledow jest parametrem logicznym (wartość bolowska) parametr logiczny zachowanie_bledow jest opcjonalny. Jeżeli parametr zachowanie_bledow przyjmuje wartość TRUE, wtedy do listy już zgłoszonych błędów jest dodawany nowy błąd (o ile taka lista już istnieje). Jeżeli parametr zachowanie_bledow przyjmuje wartość FALSE, nowy błąd zastąpi bieżącą listę błędów (ustawienie domyślne). Kolejnym istotnym faktem, o którym należy pamiętać, jest to, iż błędy są zgłaszane z wewnątrz programu. Aby zgłosić błąd z wewnątrz programu w języku PL/SQL, należy użyć wbudowanej funkcji o nazwie RAISE_APPLICATION_ERROR. Wymaga ona podania dwóch argumentów. Jeden to numer błędu, który musi się mieścić się w przedziale od do Drugi argument to komunikat o błędzie, który ma zobaczyć użytkownik. Poniżej został podany przykład umieszczonej w programie linii kodu, która zapewnia kierowanie informacji zwrotnych do użytkownika: RAISE_APPLICATION_ERROR (-20123, To jest błąd. Zrobiłeś coś nie tak ); Poniższy fragment kodu przedstawia sytuacje, jak te powyżej wymienione mechanizmy obsługi błędów współpracują w jednym programie: l_liczba_pracownikow NUMBER; i NUMBER; -- to będzie licznik l_wiersz pracownicy%rowtype SELECT * INTO l_wiersz FROM pracownicy ORDER BY nazwisko_pracownika; 13

14 WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR (-20052, Brak danych w tej tabeli. SPRÓBUJ PONOWNIE! ); WHEN others THEN RAISE_APPLICATION_ERROR (-20999, Coś poszło źle. Musisz sam wywnioskować co! ); Przykładowy efekt uruchomienia tego programu może być następujący: declare * BŁĄD w wierszu 2: ORA-20052: Brak danych w tej tabeli. SPRÓBUJ PONOWNIE! ORA-06512: w wierszu 13 Jak wynika z konstrukcji obsługi wyjątków, ten program będzie obsługiwał błędy związane z brakiem danych, a także inne. Znając zasadę działania można zapewnić obsługę różnorodnych problemów pojawiających się w programach. Zaawansowane funkcje obsługi błędów w programach w języku PL/SQL Omówione zostaną teraz sposoby tworzenia własnych wyjątków przez użytkownika. Zostaną również omówione pewne wartości specjalne dostępne podczas wykonywania programu w języku PL/SQL, które mogą być przydatne w przypadku wystąpienia błędów w kodzie programu. Wartości te pomagają usuwać błędy programu, jak również przekazują użytkownikom informacje zwrotne o zaistniałych błędach. Wyjątki definiowane przez użytkownika Gdy program w języku PL/SQL napotka błąd lub niepożądaną sytuację, zgłaszany jest wyjątek. Jak wiemy, system Oracle jest wyposażony w mechanizmy obsługi wyjątków. Jego możliwości można rozszerzyć poprzez zdefiniowanie własnych wyjątków, zwanych wyjątkami definiowanymi przez użytkownika. Wyjątki definiowane przez użytkownika mogą być wywołane w celu obsługi błędu lub podjęcia działań w sytuacji, której system Oracle nie interpretuje jako błąd. Aby wyjątek zdefiniowany przez użytkownika był prawidłowy i właściwie stosowany należy w kodzie programu zdefiniować trzy składniki: deklaracja wyjątku, wywoływanie wyjątku podczas wykonywania programu, program obsługi samego wyjątku. Jest to składnia nieco odmienna niż w przypadku wyjątków dostarczanych przez Oracle, które mogą być używane w programie bez konieczności ich deklarowania czy nawet w przypadkach, gdy nie istniał błąd. Poniżej w przykładowym programie zaprezentowano sposób łączenia się tych trzech składników w programie: l_licznik l_nazwa NUMER:=0; pracownik.nazwisko_pracownika%type; 14

15 CURSOR pobierz_nazwisko_pracownika IS SELECT nazwisko_pracownika FROM pracownicy; wyj_stary_przyjaciel ; wyj_nie_znam_czlowieka ; OPEN pobierz_nazwisko_pracownika; FETCH pobierz_nazwisko_pracownika INTO l_nazwisko; IF l_nazwisko= Jan Kowalski THEN RAISE wyj_stary_przyjaciel; ELSE RAISE wyj_nie_znam_czlowieka; CLOSE pobierz_nazwisko_pracownika; WHEN wyj_stary_przyjaciel THEN DBMS_OUTPUT.PUT_LINE( Znam ta osobę ); WHEN wyj_nie_znam_czlowieka THEN DBMS_OUTPUT.PUT_LINE( Nie znam tej osoby ); / Jak widać na podstawie tego programu, definicja i zastosowanie wyjątku definiowanego przez użytkownika zależy od jego konkretnych potrzeb. Dla celów omawianego przykładu wybrano dane z tabeli pracownicy i utworzono wyjątek dotyczący interesującego w danej sytuacji zagadnienia. Aby korzystanie z tego wyjątku było możliwe, należy zrealizować trzy zadania. 1. Pierwsze z nich to zadeklarowanie wyjątku. W tym celu należy umieścić jego nazwę w sekcji deklaracji programu: wyj_stary_przyjaciel ; wyj_nie_znam_czlowieka ; 2. Drugie wyjątek musi zostać wywołany w kodzie programu w momencie, gdy wystąpią określone warunki. W omawianym przypadku jest to pobranie nazwiska znajomego lub obcej osoby. Aby wywołać wyjątek w kodzie programu, należy po prostu użyć komendy RAISE wraz z nazwą wyjątku: RAISE wyj_stary_przyjaciel; Jak dotąd zdefiniowano, iż użytkownik zamierza zastosować wyjątek (sekcja deklaracji) i chce go użyć w konkretnym momencie (sekcja wykonania). 3. Trzeba jeszcze określić, jakie działanie wyjątek będzie wykonywał. Służy do tego sekcja obsługi wyjątków w programie. W tym przypadku działanie będzie polegało na zasygnalizowaniu, że osoba jest znana użytkownikowi: 15

16 WHEN wyj_stary_przyjaciel THEN DBMS_OUTPUT.PUT_LINE( Znam ta osobę ); W powyższym przykładzie pokazano, jak tworzyć wyjątki definiowane przez użytkownika i jak z nich korzystać. Zakres i kontekst stosowania wyjątków zależy wyłącznie od potrzeb użytkownika. Zmienne przeznaczone do obsługi błędów dostępne w oprogramowaniu Oracle Oprócz możliwości definiowania własnych wyjątków w programie PL/SQL użytkownik może również korzystać z pewnych istotnych zmiennych systemu Oracle przeznaczonych do obsługi błędów. Zmienne te, zwane pseudokolumnami, są dostępne w różnych formach, zależnie od miejsca w programie. Pseudokolumna może być użyta w instrukcji SELECT lub podczas przetwarzania danych. Poniżej zostanie zaprezentowanych klika przykładów pseudokolumn: dane systemowe (SYSDATA); numer wiersza (ROWNUM); numer błędu Oracle (SQLCODE); komunikat o błędzie (SQLERRM). Ostatnie dwie wartości (są one najczęściej wykorzystywane w obsłudze błędów) zapewniają dostęp do numerów błędów i komunikatów o błędach systemu Oracle, umożliwiając w ten sposób tworzenie programów kończących się zawsze pomyślnie, nawet w przypadku wystąpienia błędu. Do poprzednio omawianego przykładu programu tym razem zostanie dodany kolejny mechanizm obsługi wyjątków, który będzie uaktywniany w przypadku wystąpienia określonych błędów. Posłuży do tego wyjątek WHEN OTHERS: l_licznik NUMER:=0; l_nazwa pracownik.nazwisko_pracownika%type; CURSOR pobierz_nazwisko_pracownika IS SELECT nazwisko_pracownika FROM pracownicy; wyj_stary_przyjaciel ; wyj_nie_znam_czlowieka ; OPEN pobierz_nazwisko_pracownika; FETCH pobierz_nazwisko_pracownika INTO l_nazwisko; IF l_nazwisko= Jan Kowalski THEN RAISE wyj_stary_przyjaciel; ELSE RAISE wyj_nie_znam_czlowieka; CLOSE pobierz_nazwisko_pracownika; 16

17 WHEN wyj_stary_przyjaciel THEN DBMS_OUTPUT.PUT_LINE( Znam ta osobę ); WHEN wyj_nie_znam_czlowieka THEN DBMS_OUTPUT.PUT_LINE( Nie znam tej osoby ); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE( Mamy problem Numer SQLCODE); DBMS_OUTPUT.PUT_LINE( Treść komunikatu: SQLERRM); Wyjątek WHEN OTHERS może być wykorzystywany do obsługi wszelkich pojawiających się błędów, dla których nie zdefiniowano innych wyjątków. Musi to być również ostatni wyjątek umieszczony w sekcji obsługi wyjątków, ponieważ system Oracle kończy przetwarzanie danych po napotkaniu wyjątku spełniającego kryteria określone w tym wyjątku. Jeśli więc wyjątek WHEN OTHERS zostanie umieszczony na pierwszym miejscu, dalsze wyjątki w ogóle nie będą przetwarzane. W omawianym powyżej przykładzie użyto pseudokolumn SQLCODE i SQLERRM. Ich umieszczenie w programach tworzonych w języku PL/SQL zapewnia, że podczas wykonywania kodu nie nastąpi błędne zakończenie programu. Inna stosowana metoda może polegać na umieszczeniu tych wartości w zmiennych, są zwracane do programu wywołującego. Propagacja wyjątków Wyjątki mogą występować w sekcji deklaracji, wykonania lub wyjątków bloku PL/SQL. Do tej pory na wykładzie zostały przeanalizowane zdarzenia, jakie zachodzą w chwili zgłaszania wyjątków w sekcji wykonania bloku. Teraz zajmiemy się przypadkiem, gdy nie został zaprojektowany program obsługi wyjątków lub gdy wyjątek jest wywoływany z innej sekcji bloku niż sekcja wykonania bloku. Proces zachodzący w takich przypadkach jest nazywany propagacją wyjątków. Wyjątki wywoływane w sekcji wykonania. W przypadku zgłaszania wyjątku w sekcji wykonania bloku mechanizm PL/SQL wykorzystuje poniższy algorytm w celu określenia potrzebnego programu obsługi wyjątków. 1. Jeżeli bieżący blok posiada program obsługi wyjątku, należy go wykonać i zakończyć pomyślnie proces wykonywania bloku. Następnie sterowanie jest przekazywane do bloku obejmującego. 2. Jeżeli nie istnieje program obsługi dla bieżącego wyjątku, to należy propagować wyjątek przez wywołanie go w bloku obejmującym. Następnie dla bloku obejmującego należy wykonać czynności opisane w punkcie 1. Gdy nie ma bloku obejmującego, wówczas sterowanie zostanie przekazane do środowiska wywołującego, np. program SQL*Plus. Przed dokładnym wykonaniem powyższego algorytmu, który zapewni nam obsługę wyjątku zgłaszanego w sekcji wykonania, konieczne jest zdefiniowanie bloku obejmującego. Blok może być osadzony wewnątrz 17

18 drugiego i w takim przypadku blok zewnętrzny obejmuje blok wewnętrzny. Poniższy przykład ilustruje tego typu sytuację: -- Rozpoczęcie wykonywania bloku zewnętrznego Rozpoczęcie wykonywania wewnętrznego bloku 1. Jest to blok osadzony w bloku zewnętrznym Rozpoczęcie wykonywania wewnętrznego bloku 2. Jest to również blok osadzony w bloku -- zewnętrznym. Należy zwrócić uwagę, że blok ten nie posiada sekcji deklaracji Zakończenie bloku zewnętrznego W powyższym przykładzie oba wewnętrzne bloki 1 i 2 są objęte przez blok zewnętrzny. Każdy nieobsłużony wyjątek wywołany w bloku 1 i 2 będzie propagowany do bloku zewnętrznego. Wywołanie procedury również tworzy blok obejmujący. Tego typu sytuację ilustruje poniższy przykład: -- Rozpoczęcie wykonywania bloku zewnętrznego -- Wywołanie procedury. Procedura będzie objęta przez ten blok zewnętrzny F(...); WHEN OTHERS THEN Wyjątki zgłaszane przez procedurę F będą przechwycone w tym miejscu Jeżeli procedura F zgłasza nieobsługiwany wyjątek, będzie on propagowany do bloku zewnętrznego, ponieważ blok ten obejmuje procedurę. Zajmiemy się obecnie omówieniem poszczególnych przypadków algorytmu propagacji wyjątków, co zostanie zilustrowane za pomocą trzech poniższych przykładów. 18

19 Pierwszy przykład propagacji Przykład ten ilustruje zastosowanie reguły 1. z algorytmu propagacji wyjątków. Wyjątek A jest zgłaszany i obsługiwany w podbloku, następnie sterowanie powraca do bloku zewnętrznego. A Wyjątek A jest wywołany w podbloku. RAISE A; WHEN A THEN Wyjątek A jest również obsługiwany w podbloku. Tutaj jest wznawiane sterowanie 19

20 Drugi przykład propagacji Dla podbloku zastosowano 2. regułę z algorytmu obsługi wyjątków. Wyjątek jest propagowany do bloku obejmującego, gdzie jest stosowana 1. reguła. W ten sposób wykonywanie bloku obejmującego kończy się pomyślnie. A ; B ; Wyjątek B jest wywołany w podbloku. RAISE B; WHEN A THEN WHEN B THEN W podbloku nie ma żadnego programu obsługi dla wyjątku B. Wyjątek B jest propagowany do bloku obejmującego i tam jest obsługiwany. Następne sterowanie jest przekazywane na zewnątrz bloku obejmującego, którego wywołanie kończy się pomyślnie. Trzeci przykład propagacji Dla podbloku stosuję się 2. reguły z algorytmu obsługi wyjątków. Wyjątek jest propagowany do bloku obejmującego, gdzie w dalszym ciągu nie istnieje program obsługi odpowiedni dla tego wyjątku. Ponownie jest stosowana 2. reguła z algorytmu obsługi wyjątków. W ten spo-sób wykonywanie bloku obejmującego kończy się niepomyślnie, z nieobsłużonym wyjątkiem. 20

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

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ]; Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 4 Wyjątki PL/SQL Mechanizmy dotyczące błędów Typy wyjątków Obsługa wyjątków PL/SQL Obsługa błędów predefiniowanych, użytkownika

Bardziej szczegółowo

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków.

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków. Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków. 1 Komunikaty o błędach serwera Oracle Wykonanie niepoprawnej operacji w trakcie działania

Bardziej szczegółowo

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

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków... Plan wykładu Spis treści 1 Kursory 1 2 Wyjątki 4 2.1 Wyjątki predefiniowane............................. 4 2.2 Wyjątki niezdefiniowane wcześniej....................... 5 2.3 Definiowanie własnych wyjątków........................

Bardziej szczegółowo

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

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu Procedury składowane Kolejnym typem programu języka PL/SQL są procedury składowane. Procedury mogą posiadać parametry typu IN, OUT lub IN OUT. Umożliwiają wykonanie operacji na danych w bazie, mogą też

Bardziej szczegółowo

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

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1 Kursory i wyjątki Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, wyjątki systemowe i użytkownika, zgłaszanie i obsługa wyjątków 1 Kursor

Bardziej szczegółowo

Deklarowanie kursora

Deklarowanie kursora Kursory i wyjątki Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, wyjątki systemowe i użytkownika, zgłaszanie i obsługa wyjątków 1 Kursor

Bardziej szczegółowo

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

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL; Kursory Każde zapytanie SQL umieszczone w programie PLSQL jest wykonywane w tzw. obszarze roboczym lub inaczej obszarze kontekstu. PLSQL wykorzystuje ten obszar do przechowywania danych otrzymanych w wyniku

Bardziej szczegółowo

BAZY DANYCH W APLIKACJACH SIECIOWYCH

BAZY DANYCH W APLIKACJACH SIECIOWYCH BAZY DANYCH W APLIKACJACH SIECIOWYCH Wykład 4 Wyjątki. Wyzwalacze bazodanowe. (Wybrane materiały) Dr inż. E. Busłowska Obsługa wyjątków w PLSQL Wyjątek (ang. Exception) - błąd lub ostrzeżenie w PLSQL Typy

Bardziej szczegółowo

Pakiety podprogramów Dynamiczny SQL

Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL 1 Pakiety Pakiet (ang. package)

Bardziej szczegółowo

15. Funkcje i procedury składowane PL/SQL

15. Funkcje i procedury składowane PL/SQL 15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp

Bardziej szczegółowo

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

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL Plan wykładu Uzupełnienie projektu fizycznego Czym jest PL/SQL Bloki w PL/SQL Zmienne i stałe Instrukcje sterujące Wykorzystanie SQL w PL/SQL Kursory Wyjątki Projekt fizyczny bazy danych Braki projektu

Bardziej szczegółowo

PL/SQL. Zaawansowane tematy PL/SQL

PL/SQL. Zaawansowane tematy PL/SQL PL/SQL Zaawansowane tematy PL/SQL Cele Poznanie złożonych i referencyjnych typów danych Poznanie konstrukcji kursora Poznanie kodu składowanego Poznanie procedur i funkcji 2 Złożone typy danych RECORD

Bardziej szczegółowo

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

Październik 2015. Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż. 1/40 Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Październik 2015 2/40 Plan wykładu Uzupełnienie projektu fizycznego Czym jest PL/SQL Bloki w PL/SQL Wykorzystanie 3/40 Projekt

Bardziej szczegółowo

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

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa) Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty PL/SQL, c.d. 1 / 37 SQL to za mało SQL brakuje możliwości dostępnych w językach proceduralnych.

Bardziej szczegółowo

DECLARE VARIABLE zmienna1 typ danych; BEGIN

DECLARE VARIABLE zmienna1 typ danych; BEGIN Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;

Bardziej szczegółowo

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

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne Materiały dostępne są na stronie: Materiały Technologie baz danych aragorn.pb.bialystok.pl/~gkret Wykład 5: Kursory jawne. Podprogramy. Małgorzata Krętowska Wydział Informatyki Politechnika Białostocka

Bardziej szczegółowo

Technologie baz danych WYKŁAD 7: Wyjątki

Technologie baz danych WYKŁAD 7: Wyjątki Wydział Informatyki Politechnika Białostocka Obsługa wyjątków Technologie baz danych WYKŁAD 7: Wyjątki [] [] Agnieszka Oniśko, Małgorzata Krętowska TBD-wyjątki 1 TBD-wyjątki 2 Sposoby powstania sytuacji

Bardziej szczegółowo

Język PL/SQL Pakiety podprogramów

Język PL/SQL Pakiety podprogramów Język PL/SQL Pakiety podprogramów Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora) 1 Pakiety Pakiet (ang. package) grupuje powiązane

Bardziej szczegółowo

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

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL.

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 2 Kusory Wprowadzenie Kursory użytkownika Kursory domyślne Zmienne kursora Wyrażenia kursora - 2 - Wprowadzenie Co to jest kursor?

Bardziej szczegółowo

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli. SQL W JĘZYKU PL/SQL Strukturalny język zapytań SQL określa sposób manipulowania danymi w bazie danych. Konstrukcje proceduralne języka PL/SQL stają się bardziej użyteczne w połączeniu z mocą przetwarzania

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

Delphi Laboratorium 3

Delphi Laboratorium 3 Delphi Laboratorium 3 1. Procedury i funkcje Funkcja jest to wydzielony blok kodu, który wykonuje określoną czynność i zwraca wynik. Procedura jest to wydzielony blok kodu, który wykonuje określoną czynność,

Bardziej szczegółowo

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

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiety Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiet składa się ze: specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

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

Język PL/SQL. Rozdział 2. Kursory Język PL/SQL. Rozdział 2. Kursory Deklarowanie kursora, otwieranie kursora, pobieranie z kursora, zamykanie kursora, zmienne kursorowe, wyrażenie CURSOR, kursory niejawne. 1 Kursor jawny Każde zapytanie

Bardziej szczegółowo

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

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze Cechy bloków nazwanych: w postaci skompilowanej trwale przechowywane na serwerze wraz z danymi wykonywane na żądanie użytkownika lub w

Bardziej szczegółowo

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2) Kursor jawny Każde zapytanie SQL umieszczone w programie PL/SQL może zwrócić zero, jedną bądź wiele krotek. Aby efektywnie przetworzyć krotkizwrócone przez zapytanie korzystamy z kursorów. Kursor jest

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów Plan wykładu Kursory: deklaracja, otwieranie, pobieranie danych, zamykanie Kursory: atrybuty Kursory: pętle, rekordy Kursory z parametrami BAZY DANYCH II WYKŁAD 4 dr inż. Agnieszka Bołtuć Co to jest kursor?

Bardziej szczegółowo

PODSTAWY BAZ DANYCH 13. PL/SQL

PODSTAWY BAZ DANYCH 13. PL/SQL PODSTAWY BAZ DANYCH 13. PL/SQL 1 Wprowadzenie do języka PL/SQL Język PL/SQL - rozszerzenie SQL o elementy programowania proceduralnego. Możliwość wykorzystywania: zmiennych i stałych, instrukcji sterujących

Bardziej szczegółowo

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

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 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 będziemy używać w taki sam sposób, jak wbudowanych funkcji

Bardziej szczegółowo

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego Oracle Developer Suite Budowa aplikacji użytkownika końcowego Składniki pakietu Oracle Developer Suite Oracle Forms Builder formularze (aplikacje dostępne z poziomu przeglądarki internetowej, model 3-warstwowy)

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Wprowadzenie Tworzenie i wykonywanie procedur i funkcji Instrukcja RETURN Parametry procedur i funkcji oraz ich przesyłanie Metadane

Bardziej szczegółowo

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie

Bardziej szczegółowo

Kursory - pobieranie danych z baz danych do programów PL/SQL

Kursory - pobieranie danych z baz danych do programów PL/SQL Kursory - pobieranie danych z baz danych do programów PL/SQL Rozważania będą dotyczyć sposobów pobierania danych z baz danych do programów przechowywanych w pamięci. Interakcja języka PL/SQL z językiem

Bardziej szczegółowo

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Procedury i funkcje składowane

Procedury i funkcje składowane Procedury i funkcje składowane Zmienne podstawienia i zmienne wiązane, podprogramy, procedury składowane, typy argumentów, wywoływanie procedur, funkcje składowane, poziomy czystości funkcji, funkcje tablicowe

Bardziej szczegółowo

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe

Bardziej szczegółowo

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

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko Typy rozproszonych baz Systemy typu klient-serwer (jeden serwer) Jednorodna rozproszona baza (kilka serwerow, jeden system zarzadzania baza ) Niejednorodna

Bardziej szczegółowo

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

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń PL/SQL Zaawansowane tematy PL/SQL Piotr Medoń Cele Omówienie transakcji bazodanowych Omówienie obsługi wyjątków Zarządzanie perspektywami Tworzenie i usuwanie sekwencji Budowa wyzwalaczy 2 Transakcje bazodanowe

Bardziej szczegółowo

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

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image) Elementy języka T-SQL 40. Polecenie PRINT jest wykorzystywane do przekazania wiadomości tekstowej (maksymalna długość 8000 znaków) Przykład PRINT 'Aktualna data: '+convert(char(8),getdate()) PRINT 'Aktualny

Bardziej szczegółowo

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

Systemy baz danych 2 laboratorium Projekt zaliczeniowy Dany jest następujący logiczny schemat bazy danych Systemy baz danych 2 laboratorium Projekt zaliczeniowy FAKTURY POZYCJE PK f_id_faktury PK p_id_pozycji f_data_wystawienia f_data_płatnosci f_czy_zaplacona

Bardziej szczegółowo

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych

Bardziej szczegółowo

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

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie

Bardziej szczegółowo

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora Kursor Rozdział 10a Kursory Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, zmienne kursorowe, wyrażenie CURSOR Każde zapytanie SQL umieszczone

Bardziej szczegółowo

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE, Programowanie w SQL definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE, kontynuacja działania od instrukcji za podaną etykietą GOTO etykieta, wyjście bezwarunkowe

Bardziej szczegółowo

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

Język PL/SQL Procedury i funkcje składowane Język PL/SQL Procedury i funkcje składowane Podprogramy, procedury i funkcje składowane, typy argumentów, wywoływanie procedur i funkcji, poziomy czystości funkcji 1 Podprogramy Procedury (wykonują określone

Bardziej szczegółowo

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza 4 Budowa prostych formularzy, stany sesji, tworzenie przycisków Plan Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza 2 Formularz i jego typy Tworzenie formularza

Bardziej szczegółowo

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

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów SQL3 wprowadza następujące kolekcje: zbiory ( SETS ) - zestaw elementów bez powtórzeń, kolejność nieistotna listy ( LISTS ) - zestaw

Bardziej szczegółowo

Oracle11g: Programowanie w PL/SQL

Oracle11g: Programowanie w PL/SQL Oracle11g: Programowanie w PL/SQL OPIS: Kurs pozwala zrozumieć zalety programowania w języku PL/SQL. Studenci uczą się tworzyć bloki kodu wykonywanego po stronie serwera, który może być współużytkowany

Bardziej szczegółowo

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

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń 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

Bardziej szczegółowo

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Laboratorium nr 4. Temat: SQL część II. Polecenia DML Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze

Bardziej szczegółowo

Wykład 8. SQL praca z tabelami 5

Wykład 8. SQL praca z tabelami 5 Wykład 8 SQL praca z tabelami 5 Podzapytania to mechanizm pozwalający wykorzystywać wyniki jednego zapytania w innym zapytaniu. Nazywane często zapytaniami zagnieżdżonymi. Są stosowane z zapytaniami typu

Bardziej szczegółowo

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

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Cheatsheet PL/SQL Andrzej Klusiewicz  1/9 Declare y integer; z varchar2(50); d date; null; Declare x integer:=10; null; x integer; x:=10; dbms_output.put_line('hello world'); for x in 1..10 loop Deklaracja 4 zmiennych. Jednej typu rzeczywistego,

Bardziej szczegółowo

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

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH Plan wykładu 2 TWORZENIE APLIKACJI BAZODANOWYCH Wykład 2: Wprowadzenie do PL/SQL: bloki anonimowe, zmienne, kursory Wprowadzenie do PL/SQL Bloki Podstawowe składowe języka Zmienne i stałe Kursory Małgorzata

Bardziej szczegółowo

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

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Materiały do laboratorium MS ACCESS BASIC

Materiały do laboratorium MS ACCESS BASIC Materiały do laboratorium MS ACCESS BASIC Opracowała: Katarzyna Harężlak Access Basic jest językiem programowania wykorzystywanym w celu powiązania obiektów aplikacji w jeden spójny system. PROCEDURY I

Bardziej szczegółowo

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

Pętle. Dodał Administrator niedziela, 14 marzec :27 Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać

Bardziej szczegółowo

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle Rozszerzenie obiektowe w SZBD Oracle Cześć 2. Kolekcje Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Malinowski Nowak Kowalski tablica zagnieżdżona (ang.

Bardziej szczegółowo

Typy, klasy typów, składnie w funkcji

Typy, klasy typów, składnie w funkcji Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

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

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych Plan wykładu BAZY DANYCH II WYKŁAD 3 Zasięg zmiennych Zmienne powiązane Instrukcje warunkowe Pętle Pobieranie danych SQL w PL/SQL Rekordy dr inż. Agnieszka Bołtuć Zasięg zmiennych Zmienna jest dostępna

Bardziej szczegółowo

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Wyzwalacze. Anna Fiedorowicz Bazy danych 2 Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592. Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592. Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592 Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami Spis treści Założenia Projektowe...1 Schemat Bazy Danych...1

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 7 Dynamiczny SQL i PL/SQL Pierwotny dynamiczny SQL Pierwotny dynamiczny DDL Pierwotny dynamiczny DML i SELECT Pakiet DBMS_SQL Transakcje

Bardziej szczegółowo

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

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1 Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie wyzwalaczami 1 Procedury wyzwalane

Bardziej szczegółowo

Wyzwalacze (triggery) Przykład

Wyzwalacze (triggery) Przykład Wyzwalacze (triggery) Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie. W poniższym przykładzie definiujemy tablicę, a następnie trigger związany

Bardziej szczegółowo

Wykład 9. Pakiety w języku PL/SQL

Wykład 9. Pakiety w języku PL/SQL Wykład 9. Pakiety w języku PL/SQL Pakiety (ang. packages): podobnie jak podprogramy, zaliczamy do bloków nazwanych języka PL/SQL, zostały zaczerpnięty z języka ADA, lecz w stosunku do pakietu tego języka

Bardziej szczegółowo

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Przykładowa baza danych BIBLIOTEKA

Przykładowa baza danych BIBLIOTEKA Przykładowa baza danych BIBLIOTEKA 1. Opis problemu W ramach zajęć zostanie przedstawiony przykład prezentujący prosty system biblioteczny. System zawiera informację o czytelnikach oraz książkach dostępnych

Bardziej szczegółowo

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik Technologia Przykłady praktycznych zastosowań wyzwalaczy będą omawiane na bazie systemu MS SQL Server 2005 Wprowadzenie

Bardziej szczegółowo

LibreOffice Calc VBA

LibreOffice Calc VBA LibreOffice Calc VBA LibreOffice Calc umożliwia tworzenie własnych funkcji i procedur przy użyciu składni języka VBA. Dostęp do edytora makr: Narzędzia->Makra->Zarządaj makrami->libreoffice Calc Aby rozpocząć

Bardziej szczegółowo

Systemy GIS Tworzenie zapytań w bazach danych

Systemy GIS Tworzenie zapytań w bazach danych Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE

Bardziej szczegółowo

Obowiązuje od wersji

Obowiązuje od wersji Obowiązuje od wersji 8.30.0 1. Wstęp czym są gniazda rozszerzeń?... 2 2. Edytor gniazd rozszerzeń - informacje podstawowe... 3 3. Dostępne rodzaje funkcji w gniazdach rozszerzeń... 6 3.1 Procedura SQL...

Bardziej szczegółowo

Tworzenie raportów XML Publisher przy użyciu Data Templates

Tworzenie raportów XML Publisher przy użyciu Data Templates Tworzenie raportów XML Publisher przy użyciu Data Templates Wykorzystanie Szablonów Danych (ang. Data templates) jest to jedna z metod tworzenia raportów w technologii XML Publisher bez użycia narzędzia

Bardziej szczegółowo

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

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku Plan wykładu BAZY DANYCH II WYKŁAD 2 Bloki, struktura, sekcje Bloki anonimowe Tworzenie i uruchamianie Identyfikatory Literały Typy danych dr inż. Agnieszka Bołtuć Bloki Struktura bloku W programach pisanych

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196 Wyjątki 180 / 196 Wyjątki W Javie istnieje mechanizm tzw. wyjątków (ang. exception), który pozwala na przechwytywanie błędów pojawiających się w programie. Kompilacja tab [ 1 0 ] = 100; spowoduje powstanie

Bardziej szczegółowo

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie. Temat: Wyzwalacze (triggery). Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie. W poniższym przykładzie definiujemy tablicę a następnie trigger

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW Położenie podprogramów Jak wiemy, podprogramy i pakiety jako bloki nazwane, mogą być składowane w słowniku danych. Podprogram najpierw tworzy się za pomocą polecenia

Bardziej szczegółowo

Wykład 5. SQL praca z tabelami 2

Wykład 5. SQL praca z tabelami 2 Wykład 5 SQL praca z tabelami 2 Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1,

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone Plan wykładu Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone BAZY DANYCH II WYKŁAD 5 dr inż. Agnieszka Bołtuć Kolekcje Tablice asocjacyjne Używane w celu gromadzenia danych tego samego typu, Rekordy

Bardziej szczegółowo

Składowane procedury i funkcje

Składowane procedury i funkcje Składowane procedury i funkcje Procedury i funkcje są zestawem poleceń SQL, które są przechowywane na serwerze (tak jak dane w tablicach). Istnieją sytuacje, kiedy procedury i funkcje są szczególnie przydatne.

Bardziej szczegółowo

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok; Temat: Funkcje, procedury i wyzwalacze. Oprócz tabel i widoków w bazach danych możemy tworzyć własne funkcje, procedury i specjalny typ procedur, które będą automatycznie wywoływanie przez MySQL w memencie

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L - p o d s t a w y DDL SQL (Data Definition Language) Jest to zbiór instrukcji i definicji danych, którym posługujemy się

Bardziej szczegółowo

CREATE USER

CREATE USER Temat: Administrowanie użytkownikami bazy danych. Po instalacji serwera MYSQL dostępne jest konto o nazwie root. Domyślnie nie ma ono przypisanego hasła, aczkolwiek podczas procesu konfiguracji jest możliwość

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -

Bardziej szczegółowo

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym Zależności i kontrola danych budżetowych w systemie Sz@rk FK 1. Wstęp Począwszy od wersji Sz@rk FK 2011 (11.03.30) wprowadzono do programu finansowoksięgowego nowe możliwości dotyczące kontrolowania poprawności

Bardziej szczegółowo

Uzupełnij pola tabeli zgodnie z przykładem poniżej,

Uzupełnij pola tabeli zgodnie z przykładem poniżej, 1. Wykonaj bazę danych biblioteki szkolnej, Otwórz MS Access a następnie z menu plik wybierz przycisk nowy, w oknie nowy plik wybieramy pusta baza danych nadaj jej nazwę Biblioteka i wybierz miejsce w

Bardziej szczegółowo

Bazy danych 6. Klucze obce. P. F. Góra

Bazy danych 6. Klucze obce. P. F. Góra Bazy danych 6. Klucze obce P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2018 Dygresja: Metody przechowywania tabel w MySQL Tabele w MySQL moga być przechowywane na kilka sposobów. Sposób ten (żargonowo:

Bardziej szczegółowo

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

PL/SQL. Lidia Małkiewicz i Cezary Skubała PL/SQL Lidia Małkiewicz i Cezary Skubała Jest językiem trzeciej generacji (3GL), który udostępnia konstrukty programistyczne, włączając w to deklaracje zmiennych, pętlę, obsługę błędów itd. Obecnie PL/SQL

Bardziej szczegółowo

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , , Celem ćwiczeń jest zaprojektowanie oraz utworzenie na serwerze bazy danych przechowującej informacje na temat danych kontaktowych. Celem jest również zapoznanie z podstawowymi zapytaniami języka SQL służącymi

Bardziej szczegółowo