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



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

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

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

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

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Deklarowanie kursora

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

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

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

Oracle PL/SQL. Paweł Rajba.

1. ELEMENTY JĘZYKA PL/SQL

Bloki anonimowe w PL/SQL

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

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.

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

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

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

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

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

PL/SQL. Zaawansowane tematy PL/SQL

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

Technologie baz danych WYKŁAD 7: Wyjątki

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

Bloki anonimowe w PL/SQL

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

Procedury i funkcje składowane

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

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

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

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

Język PL/SQL Wprowadzenie

15. Funkcje i procedury składowane PL/SQL

Oracle PL/SQL. Paweł Rajba.

Język PL/SQL Wprowadzenie

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Pakiety podprogramów Dynamiczny SQL

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

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

Indeksy. Indeks typu B drzewo

Tabele wykorzystywane w przykładach

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

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Bazy danych 2 Laboratorium 2

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

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

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

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

Składowane procedury i funkcje

Ćwiczenie 11 PL/SQL. Wprowadzenie do języka PL/SQL

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

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

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

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

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

W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc.

Zaawansowane bazy danych i hurtownie danych semestr I

SQL 4 Structured Query Lenguage

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Ćwiczenia 2 IBM DB2 Data Studio

Oracle PL/SQL. Paweł Rajba.

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

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

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

Oracle11g: Programowanie w PL/SQL

Ada-95. Dariusz Wawrzyniak

Kursory. A. Pankowska 1

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

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

Bazy danych - Materiały do laboratoriów VIII

Wyzwalacze (triggery) Przykład

Oracle PL/SQL. Paweł Rajba.

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

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

Celem ćwiczenia jest wprowadzeniem do programowaniu w języku PL/SQL. Język PL/SQL umoŝliwia tworzenie programów, przetwarzających dane w bazie danych.

Podstawowe właściwości języka PL/SQL

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

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Przestrzenne bazy danych Podstawy języka SQL

BAZA DANYCH SIECI HOTELI

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Wykład 5. SQL praca z tabelami 2

PL/SQL. Ćwicznia 2. Ćwiczenia 3

Oracle PL/SQL. Paweł Rajba.

Transkrypt:

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 fizyczny bazy danych Braki projektu fizycznego opartego wyłącznie na możliwościach SQL a: niemożność modyfikacji danych za pośrednictwem perspektyw złożonych, brak obsługi sytuacji wyjątkowych, brak obsługi zdarzeń, brak funkcji i procedur użytkownika, brak złożonych zależności i ograniczeń integralności.

4/40 PL/SQL PL/SQL (ang. Procedural Language/Structured Query Language) - język programowania będący proceduralnym rozszerzeniem SQL wprowadzonym przez firmę Oracle (oparty na języku Ada). Umożliwia wykorzystywanie konstrukcji takich jak pętle, instrukcje warunkowe, zmienne oraz tworzenie procedur, funkcji, wyzwalaczy użytkownika wspomagających konkretną realizację bazy danych. Rozwiązanie specyficzne dla SZBD Oracle, jednakże każdy dystrybutor udostępnia swoje rozwiązania (np. PL/pgSQL w PostgreSQL), które są zbliżone do PL/SQL a.

5/40 Cechy PL/SQL Cechy PL/SQL: język proceduralny nastawiony na przetwarzanie danych, język kompilowany, język obsługujący zmienne, stałe, struktury sterujące, wyjątki, ma strukturę blokową, każda instrukcja wewnątrz bloku PL/SQL jest zakończona średnikiem, operator przypisania to :=, może zawierać instrukcje DML i TCL, nie może zawierać instrukcji DDL i DCL (nadawanie uprawnień).

6/40 Bloki PL/SQL Podstawową jednostką, z której składa się program w PL/SQL jest blok, wyróżniamy: bloki anonimowe, bloki nazwane, bloki podrzędne. Każdy blok składa się z maksymalnie trzech części: deklaracyjnej (opcjonalnie), wykonywalnej, obsługi wyjatków (opcjonalnie).

7/40 Struktura bloku PL/SQL [DECLARE deklaracje;] BEGIN bloki_podrzedne; instrukcje; [EXCEPTION obsluga_wyjatkow;] END;

8/40 Komentarze W PL/SQL stosuje się dwa rodzaje komentarzy: jednowierszowe - rozpoczynające się od znaków -- wielowierszowe - rozpoczynające się od znaków /*, a kończące */.

9/40 Typy danych PL/SQL obsługuje wszystkie typy danych SQL, oraz posiada wiele swoich, dodatkowych typów, które możemy podzielić następująco: typy proste (BINARY INTEGER, NATURAL, BOOLEAN, POSITIVE, itd.), typy złożone (RECORD, TABLE, VARRAY), typy referencyjne (REF CURSOR, REF typ obiektowy), typy definiowane przez użytkownika.

10/40 Zmienne Deklaracja zmiennych: DECLARE nazwa_zmiennej typ[(rozmiar)] [NOT NULL] [{:= DEFAULT} wartosc]; Np.: DECLARE v_wiek NUMBER(3); v_plec VARCHAR2(9); v_licznik NUMBER(4) NOT NULL := 0; v_suma NUMBER(10) DEFAULT 0;

11/40 Zmienne rekordowe Deklaracja zmiennych rekordowych: DECLARE TYPE nazwa_typu_rekordowego IS RECORD ( pole1 typ [inicjalizacja] [, pole2 typ [inicjalizacja] ] ); nazwa_zmiennej typ_rekordowy; Np.: DECLARE TYPE r_adres IS RECORD ( v_ulica VARCHAR2(30), v_nr_domu VARCHAR2(4), v_nr_mieszkania VARCHAR2(4) ); vr_adres r_adres;

12/40 Stałe Deklaracja stałych: DECLARE nazwa_stalej CONSTANT typ[(rozmiar)] {:= DEFAULT} wartosc; Np.: DECLARE c_procent CONSTANT NUMBER(2) := 10;

13/40 %TYPE, %ROWTYPE Istnieje możliwość deklarowania zmiennych o typach kolumn, lub wierszy istniejących w bazie: DECLARE nazwa_zmiennej tabela.kolumna%type; nazwa_z_rekordowej tabela%rowtype; Np.: DECLARE v_nazwisko studenci.nazwisko%type; vr_student studenci%rowtype;

14/40 IF IF warunek THEN instrukcja; END IF; IF warunek THEN instrukcja1; ELSE instrukcja2; END IF; IF warunek1 THEN instrukcja1; ELSIF warunek2 THEN instrukcja2; ELSE instrukcja_n; END IF;

15/40 CASE CASE wyrazenie WHEN wyrazenie1 THEN instrukcja1; WHEN wyrazenie2 THEN instrukcja2; [ELSE instrukcja_n]; END CASE; CASE WHEN warunek1 THEN instrukcja1; WHEN warunek2 THEN instrukcja2; [ELSE instrukcja_n]; END CASE;

16/40 Pętle LOOP instrukcje; [IF warunek THEN EXIT; END IF;] [EXIT WHEN warunek;] END LOOP; WHILE warunek LOOP instrukcje; END LOOP; FOR licznik IN [REVERSE] min..max LOOP instrukcje; END LOOP;

17/40 Instrukcja NULL BEGIN IF warunek THEN instrukcje; ELSE NULL; END IF; END;

18/40 pobieranie danych (zmienne podstawienia): v_nazwisko := &nazwisko; wyprowadzenie danych (włączona zmienna środowiskowa SERVEROUTPUT ON): dbms_output.put_line(tekst); dbms_output.new_line; dbms_output.put_line( Hello CHR(10) World ); wyczyszczenie ekranu (nie działa w PL/SQL): CLEAR SCREEN; CL SCR; -- skrócona forma

19/40 I Wewnątrz bloków PL/SQL można zagnieździć niektóre polecenia SQL: DML: INSERT, UPDATE, DELETE, specyficzną formę SELECT, TCL: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION, LOCK. Postać klauzuli SELECT: SELECT lista_wyrazen INTO lista_zmiennych FROM lista_relacji; SELECT lista_wyrazen INTO zmienna_rekordowa FROM lista_relacji;

20/40 II Postać INSERT, UPDATE i DELETE pozostaje niezmieniona, dochodzi opcjonalna klauzula RETURNING wyrazenie INTO zmienna: INSERT INTO dzialy (id_dzialu, siedziba) VALUES (90, HONOLULU ) RETURNING id_dzialu INTO v_id; Istnieje możliwość wykorzystania zmiennych rekordowych: INSERT INTO tabela VALUES zmienna_rekordowa; UPDATE tabela SET row = zmienna_rekordowa;

21/40 Kursor I Kursor - przestrzeń robocza posiadająca nazwę, pozwalająca składować i udostępniać wynik zapytania SQL. Wyróżniamy kursory jawne (deklarowane przez programistę) i niejawne o nazwie SQL (tworzone przez system dla każdej instrukcji DML i DDL). Obsługa kursora jawnego: deklaracja, otwarcie, pobranie danych, zamknięcie.

22/40 Deklaracja kursora I Deklaracja kursora: CURSOR nazwa [(parametr1 typ [:= DEFAULT wartosc1] [, parametr2])] [RETURN typ] IS SELECT; Przykłady: CURSOR c_szefowie IS SELECT DISTINCT kierownik FROM pracownicy; CURSOR c_dzial (p_id NUMBER) IS SELECT * FROM pracownicy WHERE id_dzialu=p_id; CURSOR c_dzial (p_id NUMBER := 10) IS SELECT * FROM pracownicy WHERE id_dzialu=p_id; CURSOR c_pracownicy RETURN pracownicy%rowtype;

23/40 Otwarcie kursora OPEN nazwa (lista_parametrow); Np.: DECLARE CURSOR c_dzial (p_id NUMBER := 10) IS SELECT * FROM pracownicy WHERE id_dzialu=p_id; BEGIN OPEN c_dzial(20); END;

24/40 Pobranie danych FETCH nazwa INTO {lista_zmiennych zmienna_rekordowa}; Np.: DECLARE CURSOR c_dzial (p_id NUMBER := 10) IS SELECT * FROM pracownicy WHERE id_dzialu=p_id; vr_pracownik pracownicy%rowtype; BEGIN OPEN c_dzial(20); FETCH c_dzial INTO v_pracownik; END;

25/40 Zamknięcie kursora CLOSE nazwa; Np.: DECLARE CURSOR c_dzial (p_id NUMBER := 10) IS SELECT * FROM pracownicy WHERE id_dzialu=p_id; vr_pracownik pracownicy%rowtype; BEGIN OPEN c_dzial(20); FETCH c_dzial INTO v_pracownik; CLOSE c_dzial; END;

26/40 Atrybuty kursora Każdy kursor posiada atrybuty: %ISOPEN - zwraca prawdę jeżeli kursor jest otwarty (dla niejawnego zawsze FALSE), %FOUND - zwraca prawdę jeżeli ostatnie pobranie (FETCH) lub modyfikacja danych powiodła się, %NOTFOUND - zwraca prawdę jeżeli ostatnie pobranie lub modyfikacja danych nie powiodła się, %ROWCOUNT - zwraca liczbę wierszy pobranych lub zmodyfikowanych od momentu otwarcia kursora.

27/40 Pętle obsługujące kursor I DECLARE CURSOR c_dzial (p_id NUMBER := 10) IS SELECT * FROM pracownicy WHERE id_dzialu=p_id; vr_pracownik pracownicy%rowtype; BEGIN OPEN c_dzial(20); LOOP FETCH c_dzial INTO vr_pracownik; IF c_dzial%notfound THEN EXIT; END IF; dbms_output.put_line(vr_pracownik.nazwisko); END LOOP; dbms_output.put_line( Wybrano c_dzial%rowcount wierszy. ); CLOSE c_dzial; END;

28/40 Pętle obsługujące kursor II DECLARE CURSOR c_dzial (p_id NUMBER := 10) IS SELECT * FROM pracownicy WHERE id_dzialu=p_id; BEGIN FOR vr_pracownik IN c_dzial(20) LOOP dbms_output.put_line(vr_pracownik.nazwisko); END LOOP; END;

29/40 Pętle obsługujące kursor III DECLARE v_id pracownicy.id_dzialu%type := &id; BEGIN FOR vr_pracownik IN (SELECT * FROM pracownicy WHERE id_dzialu = v_id ) LOOP dbms_output.put_line(vr_pracownik.nazwisko); END LOOP; END;

30/40 Wyjątek Wyjątek - zdarzenie (błąd lub ostrzeżenie), które może wystąpić w czasie wykonywania bloku PL/SQL. Zdarzenie to powoduje przerwanie normalnego toku działania programu i przeniesienie do sekcji EXCEPTION, w celu wykonania instrukcji przewidzianych do obsługi danej sytuacji. Wyróżniamy wyjątki predefiniowane oraz użytkownika.

31/40 predefiniowane I Niektóre wyjątki zgłaszane automatycznie przez system: CASE_NOT_FOUND - żadna z podanych klazul WHEN nie spełnia warunku, a nie przewidziano sekcji domyślnej ELSE. CURSOR_ALREADY_OPEN - próba otwarcia otwartego kursora. DUP_VAL_ON_INDEX - próba naruszenia ograniczenia unikalnej wartości. INVALID_CURSOR - nielegalna operacja na kursorze. INVALID_NUMBER - błąd wartości. LOGIN_DENIED - nieudana próba połączenia do bazy. NO_DATA_FOUND - instrukcja SELECT nie zwróciła żadnego wiersza. NOT_LOGGED_ON - nie połączono się z bazą.

32/40 predefiniowane II TIMEOUT_ON_RESOURCE - przekroczenie czasu oczekiwania na zwolnienie zasobu. TOO_MANY_ROWS - instrukcja SELECT zwróciła więcej niż jeden wiersz. VALUE_ERROR - błąd wartości. ZERO_DIVIDE - próba dzielenia przez zero. Identyfikacja błędu: SQLERRM - opis wyjątku, SQLCODE - numer wyjątku.

33/40 Korzystanie z wyjątków użytkownika I deklaracja nazwa_wyjatku EXCEPTION; podniesienie wyjątku RAISE nazwa_wyjatku; przechwycenie w sekcji obsługi wyjątków. EXCEPTION WHEN wyjatek1 THEN instrukcje1; WHEN wyjatek2 THEN instrukcje2; WHEN OTHERS THEN instrukcje_n;

34/40 Korzystanie z wyjątków użytkownika II DECLARE e_zla_wartosc EXCEPTION; BEGIN IF v_id = 0 THEN RAISE e_zla_wartosc; END IF; EXCEPTION WHEN e_zla_wartosc THEN dbms_output.put_line( Bledna wartosc identyfikatora. ); END;

35/40 Propagacja wyjątków I BEGIN BEGIN IF v_id = 0 THEN RAISE e_zla_wartosc; END IF; EXCEPTION WHEN e_zla_wartosc THEN dbms_output.put_line( Bledna wartosc identyfikatora. ); END; EXCEPTION END;

36/40 Propagacja wyjątków II BEGIN BEGIN IF v_id = 0 THEN RAISE e_zla_wartosc; END IF; EXCEPTION WHEN TOO_MANY_ROWS THEN dbms_output.put_line( Za duzo wartosci. ); END; EXCEPTION WHEN e_zla_wartosc THEN dbms_output.put_line( Bledna wartosc ident ); END;

37/40 Propagacja wyjątków III BEGIN BEGIN IF v_id = 0 THEN RAISE e_zla_wartosc; END IF; EXCEPTION WHEN TOO_MANY_ROWS THEN dbms_output.put_line( Za duzo wartosci. ); END; EXCEPTION WHEN VALUE_ERROR THEN dbms_output.put_line( Blad konwersji. ); END;

38/40 Raise application error Wywołania procedury Raise_application_error pozwala przerwać działanie programu i wyprowadzić na ekran informacje o błędzie. Składnia: Raise_application_error(numer_bledu, opis); Numer błedu zawiera się w przedziale od -20000 do -20999, a opis może zajmować 2048 bajtów. Np.: IF v_id = 0 THEN Raise_application_error(-20002, Błędny identyfikator ); ELSE END IF;

39/40 PL/SQL umożliwia: korzystanie ze zmiennych, stałych, instrukcji sterujących, przetwarzanie sekwencyjne zorientowane na dane, obsługę sytuacji wyjątkowych, i wiele innych, o czym na następnym wykładzie

40/40 W wykładzie wykorzystano materiały: http://www.oracle.com/technology/tech/pl_sql/ index.html M. Lentner, Oracle 9i Kompletny podręcznik użytkownika, PJWSTK - W-wa, 2003 http://wazniak.mimuw.edu.pl/index.php?title= Bazy_danych http://www.ploug.org.pl/showhtml.php?file= szkola/szkola_9/materialy Garcia-Molina, Ullman, Widom: Implementacja systemów baz danych, WNT 2003