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



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

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

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

Deklarowanie kursora

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

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

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

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.

Oracle PL/SQL. Paweł Rajba.

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

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

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

BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

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

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

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

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

PL/SQL. Zaawansowane tematy PL/SQL

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

Procedury i funkcje składowane

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

Bloki anonimowe w PL/SQL

1. ELEMENTY JĘZYKA PL/SQL

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

15. Funkcje i procedury składowane PL/SQL

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

Pakiety podprogramów Dynamiczny SQL

Technologie baz danych WYKŁAD 7: Wyjątki

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

Oracle PL/SQL. Paweł Rajba.

Indeksy. Indeks typu B drzewo

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

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

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

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

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

Ćwiczenia 2 IBM DB2 Data Studio

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

Język PL/SQL Wprowadzenie

Bazy danych 2 Laboratorium 2

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

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

Tabele wykorzystywane w przykładach

Język PL/SQL Wprowadzenie

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

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

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

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

Składowane procedury i funkcje

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

1. Wyzwalacze BD (ang. triggers)

Zaawansowane bazy danych i hurtownie danych semestr I

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

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

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.

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Paweł Rajba

Oracle PL/SQL. Paweł Rajba.

Wykład 5. SQL praca z tabelami 2

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

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

Kursory. A. Pankowska 1

SQL 4 Structured Query Lenguage

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Struktura bazy danych

Bazy danych programowanie Wykład dla studentów matematyk

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

BAZA DANYCH SIECI HOTELI

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

Administracja i programowanie pod Microsoft SQL Server 2000

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Plan wykładu BAZY DANYCH II WYKŁAD 6. Co to są wyjątki? Co to są wyjątki?

PL/SQL. Ćwicznia 2. Ćwiczenia 3

Oracle PL/SQL. Paweł Rajba.

PL/SQL. Zaawansowane tematy PL/SQL

Wprowadzenie do języka SQL

BAZY DANYCH Cz III. Transakcje, Triggery

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

Administracja i programowanie pod Microsoft SQL Server 2000

Język PL/SQL Pakiety podprogramów

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

Multimedialne bazy danych - laboratorium

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

Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych

Transkrypt:

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 PL/pgSQL- zaimplementowany przez PostgreSQL PL/SQL (ang. Procedural Language/Structured Query Language) Proceduralne rozszerzenie języka SQL do pisania aplikacji w Oracle język proceduralny; kompilowany wykorzystuje typowe konstrukcje programistyczne; pętle, decyzje ma strukturę blokową każda instrukcja bloku PL/SQL jest zakończona średnikiem operator przypisania to := bloki mogą być zagnieżdżone jedynymi poleceniami języka SQL, które mogą pojawić się w bloku PL/SQL są: INSERT, UPDATE, DELETE, SELECT ( zmiany w składni ) oraz obsługi transakcji obsługuje wszystkie typy SQL, oraz swoje dodatkowe typy np. BOOLEAN, typy złożone; RECORD, TABLE, VARRAY oraz typy definiowane przez użytkownika Blok anonimowy [ DECLARE <deklaracje obiektów; zmienne, stałe, wyjątki, >] <ciąg instrukcji do wykonania> ; [ EXCEPTION <obsługa wyjątków>; ] END ; Deklaracja zmiennych DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ]; przykłady deklaracji znak CHAR(1); wynagrodzenie NUMBER( 7,2 ); pi CONSTANT NUMBER(7,5) := 3.14159 ; nazwa VARCHAR2( 10 ) := DRUKARKA ; termin DATE := Sysdate ; 1

stan_cywilny BOOLEAN := FALSE ; brak_danych EXCEPTION ; nazwisko_osoby podatnicy.nazwisko%type ; osoba_rekord podatnicy%rowtype ; Instrukcje sterujące IF <warunek_logiczny> THEN <blok instrukcji ;> END IF ; IF <warunek_logiczny> THEN < blok_1 instrukcji ;> ELSE <blok_2 instrukcji> END IF ; IF <warunek_logiczny_1> THEN <blok_1 instrukcji ;> ELSIF <warunek_logiczny_2> THEN <blok_2 instrukcji ;> END IF ; CASE WHEN <warunek_logiczny_1> THEN <blok_1 instrukcji ;> WHEN <warunek_logiczny_2> THEN <blok_2 instrukcji ;> [ ELSE <blok_n instrukcji> ;] END CASE ; <blok instrukcji >; ( w tym EXIT lub EXIT WHEN <warunek logiczny>;) END ; FOR <zmienna> IN <wartość_1>.. <wartość_2> < blok instrukcji ;> END ; WHILE <warunek logiczny> <blok instrukcji ;> END ; Polecenia SQL w PL/SQL wewnątrz bloków postać poleceń INSERT, UPDATE, DELETE pozostaje niezmieniona, dochodzi opcjonalna klauzula RETURNING <wyrazenie> INTO <zmienna> 2

przykłady: SET SERVEROUTPUT ON EXIT WHEN (to_char(sysdate,'ss')='25'); END ; DBMS_OUT.put_line('Nadeszla 25 sekunda'); CREATE TABLE Tymczasem (Kol VARCHAR2(12)); DECLARE v_day VARCHAR2(15); FOR i IN 2014..2020 FOR j IN 01..12 v_day := TO_CHAR(TO_DATE('13-' j '-' i, 'DD-MM-YYYY'), 'DAY'); IF (v_day LIKE 'PIĄTEK%') THEN INSERT INTO Tymczasem VALUES ('13-' j '-' i); END IF; END ; END ; DBMS_OUTPUT.put_line('KONIEC'); Specyficzną formę przyjmuje polecenie SELECT w przypadku, gdy wynikiem polecenia będzie dokładnie jeden wiersz. SELECT <lista_wynikowa> INTO <lista_zmiennych> FROM <źródło_danych> ; SELECT <lista_wynikowa> INTO <zmienna_rekordowa> FROM <źródło_danych> ; Kursor nazwany obszar roboczy, pozwalający składować i udostępniać wynik polecenia SQL wyróżnia się kursory jawne ( deklarowane przez programistę ) niejawne tworzone przez system o nazwie SQL Obsługa kursora jawnego: deklaracja CURSOR <nazwa_kursora> [(<parametr1> <typ> [ := DEFAULT <wartość1> ] [, <parametr2> ] )] [RETURN <typ> ] IS SELECT ; 3

otwarcie kursora OPEN <nazwa_kursora> [(<lista_parametrów>) ]; pobranie danych FETCH <nazwa_kursora> INTO {< lista_zmiennych > < zmienna_rekordowa > }; zamknięcie kursora CLOSE < nazwa_kursora>; Atrybuty kursora: %ROWCOUNT zwraca liczbę wierszy pobranych lub zmodyfikowanych od momentu otwarcia kursora %FOUND zwraca prawdę jeśli ostatnie pobranie lub modyfikacja danych powiodła się %NOT_FOUND zwraca prawdę jeśli ostatnie pobranie lub modyfikacja danych nie powiodła się %ISOPEN zwraca prawdę jeśli kursor jest otwarty ( dla niejawnego zawsze FALSE ) Przykłady: DECLARE CURSOR c_zespol (p_id_zesp NUMBER :=20) IS SELECT * FROM Pracownicy WHERE id_zesp = p_id_zesp; vr_pracownik pracownicy%rowtype; OPEN c_zespol(30); FETCH c_zespol INTO vr_pracownik; IF c_zespol%notfound THEN EXIT; END IF; dbms_output.put_line(vr_pracownik.nazwisko ' ' vr_pracownik.etat); END ; dbms_output.put_line(' Wybrano ' c_zespol%rowcount ' wierszy '); CLOSE c_zespol; FOR i IN ( SELECT nazwisko, etat FROM Pracownicy) dbms_output.put_line(i.nazwisko ' ' i.etat); END ; 4

Wyjątek zdarzenie (błąd lub ostrzeżenie), które może wystąpić w czasie wykonywania bloku PL/SQL. kiedy wyjątek jest podnoszony, następuje przerwanie normalnego toku działania programu i przeniesienie do sekcji EXCEPTION, w celu wykonania instrukcji przewidzianych do obsługi danej sytuacji. istnieje grupa wyjątków predefiniowanych oraz wyjątki użytkownika Niektóre wyjątki zgłaszane autonomicznie przez system: CASE_NOT_FOUND żadna z podanych klauzul WHEN nie spełnia warunku, a nie przewidziano sekcji domyślnej ELSE NO_DATA_FOUND instrukcja SELECT nie zwróciła żadnego wiersza TOO_MANY_ROWS instrukcja SELECT zwrócła więcej niż jeden wierszowych INVALID_NUMBER nieudana konwersja na liczbę VALUE_ERROR błąd obcięcia, artymetyczny ZERO_DIVIDE próba dzielenia przez zero CURSOR_ALREADY_OPEN próba otwarcia otwartego kursora INVALID_CURSOR nielegalna operacja na kursorze Identyfikacja błędu: SQLERRM opis wyjątku SQLCODE numer wyjątku Korzystanie z wyjątków użytkownika deklaracja <nazwa_wyjątku> EXCEPTION; podniesienie wyjątku RAISE <nazwa_wyjątku>; przechwycenie w sekcji obsługi wyjątków EXCEPTION WHEN <wyjątek1> THEN <instrukcje1;> WHEN <wyjątek2> THEN <instrukcje2;> WHEN OTHERS THEN <instrukcje_n;> 5

Propagacja wyjątków IF v_id =0 THEN RAISE e_zla_wartosc; END IF; EXCEPTION WHEN TOO_MANY_ROWS THEN dbms_output.put_line (' za dużo wartości'); EXCEPTION WHEN e_zla_wartosc THEN dbms_output.put_line ('błędna wartość'); RAISE_APPLICATION_ERROR rodzaj procedury, która pozwala przerwać działanie programu i wyprowadzić na ekran informacje o błędzie składnia RAISE_APPLICATION_ERROR( <numer_błędu>, <opis_błędu>); gdzie numer błędu jest z przedziału od -20000 do -20999, opis może zajmować co najwyżej 512 znaków style stosowania wyjątków; kiedy używać RAISE_APPLICATION_ERROR zamiast RAISE 6