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



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

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

Deklarowanie kursora

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

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

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

Oracle PL/SQL. Paweł Rajba.

1. ELEMENTY JĘZYKA PL/SQL

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

Bloki anonimowe w PL/SQL

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ł 2. Kursory

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

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

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

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

PL/SQL. Zaawansowane tematy PL/SQL

Bloki anonimowe w PL/SQL

BAZY DANYCH W APLIKACJACH SIECIOWYCH

Technologie baz danych WYKŁAD 7: Wyjątki

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

Procedury i funkcje składowane

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

15. Funkcje i procedury składowane PL/SQL

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

Język PL/SQL Wprowadzenie

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

Indeksy. Indeks typu B drzewo

Oracle PL/SQL. Paweł Rajba.

Pakiety podprogramów Dynamiczny SQL

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

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

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

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

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

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

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

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

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

Bazy danych 2 Laboratorium 2

Oracle11g: Programowanie w PL/SQL

Składowane procedury i funkcje

Tabele wykorzystywane w przykładach

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.

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

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

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

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

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

Oracle PL/SQL. Paweł Rajba.

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

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

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.

Zaawansowane bazy danych i hurtownie danych semestr I

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

Oracle PL/SQL. Paweł Rajba.

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

Wyzwalacze (triggery) Przykład

Ćwiczenia 2 IBM DB2 Data Studio

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

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

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

SQL 4 Structured Query Lenguage

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

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Kursory. A. Pankowska 1

Wykład 5. SQL praca z tabelami 2

Oracle PL/SQL. Paweł Rajba.

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

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

Przestrzenne bazy danych Podstawy języka SQL

Ada-95. Dariusz Wawrzyniak

Oracle10g: Programowanie w PL/SQL

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

PL/SQL. Ćwicznia 2. Ćwiczenia 3

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

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

Transkrypt:

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 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. 1 Wprowadzenie 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. 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 (sterowania sesją).

2 PL/SQL - podstawy 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). Struktura bloku PL/SQL [ deklaracje;] bloki_podrzedne; instrukcje; [ obsluga_wyjatkow;] 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 */. 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. 2

2.1 Zmienne i stałe Zmienne Deklaracja zmiennych: nazwa_zmiennej typ[(rozmiar)] [NOT NULL] [{:= DEFAULT} wartosc]; Np.: v_wiek NUMBER(3); v_plec VARCHAR2(9); v_licznik NUMBER(4) NOT NULL := 0; v_suma NUMBER(10) DEFAULT 0; Zmienne rekordowe Deklaracja zmiennych rekordowych: TYPE nazwa_typu_rekordowego IS RECORD ( pole1 typ [inicjalizacja] [, pole2 typ [inicjalizacja] ] ); nazwa_zmiennej typ_rekordowy; Np.: TYPE r_adres IS RECORD ( v_ulica VARCHAR2(30); v_nr_domu VARCHAR2(4); v_nr_mieszkania VARCHAR2(4); ); vr_adres r_adres; Stałe Deklaracja stałych: nazwa_stalej CONSTANT typ[(rozmiar)] {:= DEFAULT} wartosc; Np.: c_procent CONSTANT NUMBER(2) := 10; %TYPE, %ROWTYPE Istnieje możliwość deklarowania zmiennych o typach kolumn, lub wierszy istniejących w bazie: nazwa_zmiennej tabela.kolumna%type; nazwa_z_rekordowej tabela%rowtype; 3

Np.: v_nazwisko studenci.nazwisko%type; vr_student studenci%rowtype; 2.2 Instrukcje sterujące IF IF warunek THEN instrukcja; IF warunek THEN instrukcja1; ELSE instrukcja2; IF warunek1 THEN instrukcja1; ELSIF warunek2 THEN instrukcja2; ELSE instrukcja_n; CASE 4

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; Pętle LOOP instrukcje; [IF warunek THEN EXIT; ] [EXIT WHEN warunek;] END LOOP; WHILE warunek LOOP instrukcje; END LOOP; FOR licznik IN [REVERSE] min..max LOOP instrukcje; END LOOP; Instrukcja NULL IF warunek THEN instrukcje; 5

ELSE NULL; 2.3 Interakcje Interakcje pobieranie danych (zmienne podstawienia): v_nazwisko := &nazwisko; wyprowadzenie danych (włączona zmienna środowiskowa SERVEROUTPUT ON): dbms_output.put_line(tekst); 2.4 SQL w PL/SQL SQL w PL/SQL 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; SQL w PL/SQL 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; 6

3 Kursory 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. 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 CURSOR c_dzial (p_id NUMBER := 10) IS CURSOR c_pracownicy RETURN pracownicy%rowtype; Otwarcie kursora OPEN nazwa (lista_parametrow); Np.: CURSOR c_dzial (p_id NUMBER := 10) IS OPEN c_dzial(20); 7

Pobranie danych FETCH nazwa INTO {lista_zmiennych zmienna_rekordowa}; Np.: CURSOR c_dzial (p_id NUMBER := 10) IS vr_pracownik pracownicy%rowtype; OPEN c_dzial(20); FETCH c_dzial INTO v_pracownik; Zamknięcie kursora CLOSE nazwa; Np.: CURSOR c_dzial (p_id NUMBER := 10) IS vr_pracownik pracownicy%rowtype; OPEN c_dzial(20); FETCH c_dzial INTO v_pracownik; CLOSE c_dzial; 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. 8

Pętle obsługujące kursor I CURSOR c_dzial (p_id NUMBER := 10) IS vr_pracownik pracownicy%rowtype; OPEN c_dzial(20); LOOP FETCH c_dzial INTO vr_pracownik; IF c_dzial%notfound THEN EXIT; dbms_output.put_line(vr_pracownik.nazwisko); END LOOP; dbms_output.put_line( Wybrano c_dzial%rowcount wierszy. ); CLOSE c_dzial; Pętle obsługujące kursor II CURSOR c_dzial (p_id NUMBER := 10) IS FOR vr_pracownik IN c_dzial(20) LOOP dbms_output.put_line(vr_pracownik.nazwisko); END LOOP; Pętle obsługujące kursor III v_id pracownicy.id_dzialu%type := &id; FOR vr_pracownik IN (SELECT * FROM pracownicy WHERE id_dzialu = v_id ) LOOP dbms_output.put_line(vr_pracownik.nazwisko); END LOOP; 4 Wyjątki 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, w celu wykonania instrukcji przewidzianych do obsługi danej sytuacji. Wyróżniamy wyjątki predefiniowane oraz użytkownika. 9

Wyjątki predefiniowane 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. LOGON_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ą. 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. Korzystanie z wyjątków użytkownika I deklaracja nazwa_wyjatku ; podniesienie wyjątku RAISE nazwa_wyjatku; przechwycenie w sekcji obsługi wyjątków. WHEN wyjatek1 THEN instrukcje1; WHEN wyjatek2 THEN instrukcje2; WHEN OTHERS THEN instrukcje_n; 10

Korzystanie z wyjątków użytkownika II e_zla_wartosc ; IF v_id = 0 THEN RAISE e_zla_wartosc; WHEN e_zla_wartosc THEN dbms_output.put_line( Bledna wartosc identyfikatora. ); Propagacja wyjątków I IF v_id = 0 THEN RAISE e_zla_wartosc; WHEN e_zla_wartosc THEN dbms_output.put_line( Bledna wartosc identyfikatora. ); Propagacja wyjątków II IF v_id = 0 THEN RAISE e_zla_wartosc; WHEN TOO_MANY_ROWS THEN dbms_output.put_line( Za duzo wartosci. ); WHEN e_zla_wartosc THEN dbms_output.put_line( Bledna wartosc 11

identyfikatora. ); Propagacja wyjątków III IF v_id = 0 THEN RAISE e_zla_wartosc; WHEN TOO_MANY_ROWS THEN dbms_output.put_line( Za duzo wartosci. ); WHEN VALUE_ERROR THEN dbms_output.put_line( Blad konwersji. ); 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 5 Podsumowanie Podsumowanie PL/SQL umożliwia: korzystanie ze zmiennych, stałych, instrukcji sterujących, przetwarzanie sekwencyjne zorientowane na dane, obsługę sytuacji wyjątkowych, wykorzystanie predefiniowanych pakietów i bibliotek. i wiele innych, o czym na następnym wykładzie 12

6 Źródła Źródła 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 13