Bazy danych Zaawansowane przetwarzanie danych

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

Download "Bazy danych Zaawansowane przetwarzanie danych"

Transkrypt

1 Bazy danych Zaawansowane przetwarzanie danych Marcin Szpyrka Katedra Informatyki Stosowanej AGH w Krakowie 2015/16 Literatura 1. Jeffrey D. Ullman, Jennifer Widom: Podstawowy kurs systemów baz danych, Helion, Gliwice, Thomas Connolly, Carolyn Begg: Systemy baz danych, tom 1 i 2, Wydawnictwo RM, Warszawa, Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom: Systemy baz danych. Pełny wykład, WNT, Warszawa, Chris J. Date: Relacyjne bazy danych dla praktyków, Wydawnictwo Helion, Gliwice, Joe Celko: SQL zaawansowane techniki programowania, Wydawnictwo Naukowe PWN, Warszawa, Sharon Allen: Modelowanie danych, Wydawnictwo Helion, Gliwice, dokumentacja systemu PostgreSQL. 8. Antoni Ligęza: Materiały do wykładów z baz danych, Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 2/75

2 Podzapytania Zapytanie, które jest częścią innego zapytania nazywamy podzapytaniem. Podzapytania mogą zawierać inne podzapytania i mogą być zagnieżdżane do dowolnego poziomu. Rodzaje podzapytań Podzapytania skalarne zwracają pojedynczą wartość mogą być użyte wszędzie tam, gdzie wymagana jest pojedyncza wartość. Podzapytania krotkowe zwracają pojedynczą krotkę używane są w miejscach gdzie wymagany jest konstruktor wartości krotkowych. Podzapytania relacyjne zwracają wartość relacyjną (zbiór krotek) mogą być użyte wszędzie tam, gdzie wymagana jest relacja. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 3/75 Zasady używania podzapytań Podzapytanie zawsze umieszczamy w nawiasie okrągłym. Podzapytanie może odwoływać się do atrybutów z otaczającego je zapytania, które są traktowane jak stałe przy każdej ewaluacji podzapytania. Podzapytanie odwołujące się do atrybutów z zapytania nadrzędnego nazywamy skorelowanym. Domyślnie nazwy atrybutów w podzapytaniu odnoszą się do nazw atrybutów z relacji wymienionych w klauzuli from tego podzapytania. W podzapytaniach nie wolno używać klauzuli order by. Jeżeli podzapytanie jest jednym z dwóch argumentów porównania, to musi występować po prawej stronie porównania. atrybuty z zewnętrznego zapytania select nazwisko, imie, (select max(punkty) from punktujace where punktujace.numer = siatkarki.numer and punktujace.iddruzyny = siatkarki.iddruzyny) as maksimum from siatkarki order by 3 desc; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 4/75

3 Podzapytania w klauzuli where przykłady select nazwisko, imie, punkty from siatkarki natural join punktujace where punkty = (select max(punkty) from punktujace); select nazwisko, imie, punkty from siatkarki natural join punktujace where punkty > ((select max(punkty) from punktujace) - 5) order by punkty desc; select nazwa, miasto from druzyny where iddruzyny in (select iddruzyny from punktujace where punkty > 25); select nazwa, miasto from druzyny where iddruzyny in (select iddruzyny from punktujace where punkty > 2 * (select avg(punkty) from punktujace)); Znak = może być użyty, jeśli mamy pewność, że podzapytanie zwróci dokładnie jedną wartość. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 5/75 Operator exists Operator exists służy do sprawdzenia, czy dane zapytanie zwróciło co najmniej jedną wartość tj. czy relacja będąca wynikiem podzapytania nie jest pusta. select * from punktujace natural join siatkarki where punkty > 8 and pozycja = rozgrywająca ; select nazwa, miasto from druzyny where exists (select * from punktujace natural join siatkarki where punktujace.iddruzyny = druzyny.iddruzyny and punkty > 8 and pozycja = rozgrywająca ); Ponieważ wartości zwracanych krotek nie mają żadnego znaczenia, często zwraca się po prostu jakąś stałą wartość. select nazwa, miasto from druzyny where not exists (select 1 from punktujace natural join siatkarki where punktujace.iddruzyny = druzyny.iddruzyny and punkty > 25); Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 6/75

4 Podzapytania w klauzuli where operatory (1) <exp> in (<list>) wyrażenie <exp> należy do listy zwracanej przez podzapytanie; <exp> not in (<list>) wyrażenie <exp> nie należy do listy zwracanej przez podzapytanie; <exp> <rel> any (<list>) wyrażenie <exp> spełnia relację <rel> w odniesieniu do co najmniej jednego z elementów zwracanej przez podzapytanie (zamiast any można użyć some, zamiast = any można użyć in); <exp> <rel> all (<list>) wyrażenie <exp> spełnia relację <rel> w odniesieniu do wszystkich elementów zwracanej przez podzapytanie; exists podzapytanie zwraca jakąś wartość; not exists podzapytanie nie zwraca żadnej wartości; <rel> zwykle operator porównania: =, >, <, >=, <=, <>. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 7/75 Podzapytania w klauzuli where operatory (2) <exp> <> any (<list>) oznacza: <exp> not in (<list>) oznacza: <exp> l 1 <exp> l 2... <exp> l k <exp> l 1 <exp> l 2... <exp> l k Predykaty: x >= all (select...) i x >= (select max(x)...) nie są równoważne, ze względu na fakt, że funkcja max ignoruje wartości null. create table a (x integer); create table b (x integer); insert into a values (1), (2), (4), (5); insert into b values (1), (2), (3), (NULL); select x from a where x >= all (select x from b); -- (0 rows) select x from a where x >= (select max(x) from b); (2 rows) Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 8/75

5 Wartość null i predykat in (1) W przypadku zastosowania operatora not in, należy zwrócić uwagę na fakt, czy na liście wartości zwracanej przez podzapytanie może pojawić się null. Jeżeli tak się stanie, to wynikiem całego zapytania będzie pusta relacja. create table a (x integer); create table b (x integer); insert into a values (1), (2), (3), (4); insert into b values (1), (NULL), (2); select * from a where x not in (select x from b); --- (0 rows) Przekształcenia: where x not in (select x from b) where x not in (1, NULL, 2) where not (x in (1, NULL, 2)) where not ((x = 1) or (x = NULL) or (x = 2)) where ((x <> 1) and (x <> NULL) and (x <> 2)) where ((x <> 1) and UNKNOWN and (x <> 2)) where UNKNOWN Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 9/75 Wartość null i predykat in (2) Wartość null z tabeli a nie spełnia warunku, więc nie znajdzie się w wyniku. create table a (x integer); create table b (x integer); insert into a values (1), (2), (NULL), (4); insert into b values (1), (2), (3); select * from a where x not in (select x from b); (1 row) Przekształcenia: where x not in (select x from b) where x not in (1, 2, 3) where not (x in (1, 2, 3)) where not ((x = 1) or (x = 2) or (x = 3)) where ((x <> 1) and (x <> 2) and (x <> 3)) Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 10/75

6 Predykat exists i złączenia Bardzo często podzapytanie z predykatem exists (not exists) może zostać spłaszczone do użycia join. create table a (x integer); create table b (x integer); insert into a values (1), (2), (4), (5); insert into b values (1), (2), (3); select * from a where exists (select * from b where a.x = b.x); select a.x from a join b on a.x = b.x; select * from a where not exists (select * from b where a.x = b.x); select a.x from a left outer join b on a.x = b.x where b.x is null; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 11/75 Podzapytania w klauzuli from Podzapytania użyte w klauzuli from muszą mieć przypisane aliasy. select avg(pkt)::numeric(5,2) from (select sum(punkty) pkt from punktujace group by idmeczu) p; select avg(pkt)::numeric(5,2) from (select idmeczu, iddruzyny, sum(punkty) pkt from punktujace group by idmeczu, iddruzyny) p; select nazwa, pkt from druzyny natural join (select idmeczu, iddruzyny, sum(punkty) pkt from punktujace group by idmeczu, iddruzyny) p; select nazwa, avg(pkt)::numeric(5,2) from druzyny natural join (select idmeczu, iddruzyny, sum(punkty) pkt from punktujace group by idmeczu, iddruzyny) p group by nazwa order by 2 desc; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 12/75

7 Podzapytania w klauzuli having select idmeczu, termin, sum(punkty) from punktujace natural join mecze group by idmeczu, termin having sum(punkty) > (select avg(pkt)::numeric(5,2) from (select sum(punkty) pkt from punktujace group by idmeczu) p) order by 3; select nazwisko, imie, sum(punkty) from siatkarki natural join punktujace group by nazwisko, imie having sum(punkty) > (select sum(punkty) from siatkarki natural join punktujace where nazwisko = Kosek and imie = Karolina ) order by 3 desc; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 13/75 Klauzula with (1) Klauzula with pozwala na definiowania pomocniczych wyrażeń, które są następnie wykorzystywane w wyrażeniu głównym. W najprostszej postaci, stanowi ona alternatywną wersję zapisywania zapytań z podzapytaniami w klauzuli from. with p as ( select sum(punkty) pkt from punktujace group by idmeczu ) select avg(p.pkt)::numeric(5,2) from p; with p as (select idmeczu, iddruzyny, sum(punkty) pkt from punktujace group by idmeczu, iddruzyny) select nazwa, avg(pkt)::numeric(5,2) from druzyny natural join p group by nazwa order by 2 desc; with suma_zamowienia as ( select idklienta, sum(cena) as suma_zam from zamowienia group by idklienta), suma_historia as (select idklienta, sum(cena) as suma_his from historia group by idklienta) select idklienta, nazwa, coalesce(suma_zamowienia.suma_zam,0) + coalesce(suma_historia.suma_his,0) from klienci left join suma_zamowienia using(idklienta) left join suma_historia using(idklienta) order by 3 desc; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 14/75

8 Klauzula with (2) Klauzula with może być również użyta z instrukcjami insert, update, delete. Klauzula returning jest wówczas stosowana do zwrócenia rekordów przetwarzanych przez wyrażenie pomocnicze. with archiwizacja as ( delete from zamowienia where termin = returning * ) insert into historia select idzamowienia, idklienta, idkompozycji, cena, termin from archiwizacja; with p as ( update kompozycje set cena = cena * 1.1 returning * ) select idkompozycji, nazwa, cena from p; with p as ( update kompozycje set cena = cena * 1.1 returning * ) select idkompozycji, nazwa, cena from kompozycje; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 15/75 Dzielenie relacji Niech H 1 = {A 1, A 2,..., A n, B 1, B 2,..., B k } będzie nagłówkiem relacji R i niech H 2 = {B 1, B 2,..., B k } będzie nagłówkiem relacji S, przy czym zakładamy że S. Iloraz R S jest relacją o schemacie H = {A 1, A 2,..., A n }, która zawiera wszystkie krotki t o schemacie H takie, że dla dowolnej krotki s S, krotka {t, s} R. Dostawca Budex Budex Budex Budex Matbud Matbud Matbud Matbud Probud Probud Probud Probud Element cegła pustak cement piasek pustak cement gips piasek cegła cement piasek żwir Element cegła cement piasek = Dostawcy Budex Probud Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 16/75

9 Dzielenie implementacja (1) create table kandydaci ( id integer primary key, imie varchar(30) not null, nazwisko varchar(30) not null ); insert into kandydaci values(1, Adam, Nowak ); insert into kandydaci values(2, Piotr, Nowak ); insert into kandydaci values(3, Karol, Nowakowski );... create table jezyki ( id integer not null, jezyk varchar(10) not null, primary key(id,jezyk) ); insert into jezyki values(1, angielski ); insert into jezyki values(1, niemiecki ); insert into jezyki values(1, rosyjski );... create table wymagane_jezyki ( jezyk varchar(10) primary key); insert into wymagane_jezyki values( angielski ); insert into wymagane_jezyki values( rosyjski ); Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 17/75 Dzielenie implementacja (2) -- dzielenie definicyjne select id, imie, nazwisko from kandydaci natural join jezyki except -- ponizsze zapytanie zwraca dane kandydatow, -- ktorzy nie znaja co najmniej jednego z wymaganych jezykow select id, imie, nazwisko from ( -- wszystkie mozliwe wpisy kandydat + wymagany jezyk select id, imie, nazwisko, j.jezyk from kandydaci, wymagane_jezyki j except -- istniejące wpisy kandydat + jezyk select * from kandydaci natural join jezyki ) p; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 18/75

10 Dzielenie implementacja (3) -- dzielenie wg Celko select distinct id, imie, nazwisko from (kandydaci natural join jezyki) kj1 where not exists ( select * from wymagane_jezyki j where not exists ( select * from (kandydaci natural join jezyki) kj2 where kj2.id = kj1.id and kj2.jezyk = j.jezyk ) ); -- dzielenie wg Celko z except select distinct id, imie, nazwisko from (kandydaci natural join jezyki) kj1 where not exists ( select jezyk from wymagane_jezyki except select jezyk from (kandydaci natural join jezyki) kj2 where kj2.id = kj1.id ); -- dla których nie -- istnieje taki język w j -- że ta osoba nie zna -- tego jezyka Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 19/75 Porównywanie wzorców POSIX Regular Expressions Operator Znaczenie ~ dopasowanie do wzorca, czuły na wielkość znaków ~* dopasowanie do wzorca, nieczuły na wielkość znaków!~ brak dopasowania do wzorca, czuły na wielkość znaków!~* brak dopasowania do wzorca, nieczuły na wielkość znaków W przeciwieństwie do wzorców używanych w like, w przypadku wyrażeń regularnych standardu POSIX, wyrażenie regularne nie musi pasować do całego napisu, ale może pasować tylko do jego części. Można wymusić by był to np. początek lub koniec napisu. POSIX (ang. Portable Operating System Interface for Unix) dosłownie przenośny interfejs systemu operacyjnego. POSIX standaryzuje: interfejs programistyczny (API); interfejs użytkownika, np. polecenia systemowe; właściwości powłoki systemu. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 20/75

11 Wyrażenia regularne - POSIX Wyrażenie regularne jest definiowane jako jako jedna lub więcej gałęzi oddzielonych znakiem. Pasuje ono do dowolnego napisu, który pasuje do co najmniej jednej z gałęzi. Gałąź składa się z połączonych zero lub więcej atomów z określoną krotnością lub ograniczeń. Pusta gałąź pasuje do pustego napisu. Atom z określoną krotnością jest atomem z opcjonalnym określeniem jego krotności. Brak określenia krotności oznacza jego pojedyncze wystąpienie. Ograniczenie pasuje do pustego napisu, ale tylko wtedy, gdy spełnione są zadane warunki (np. dla kotwicy $ jest to koniec napisu). Może być używane w dowolnym miejscu, tak jak atom, ale nie może mieć określenia krotności. Określenia krotności nie mogą występować po sobie, nie mogą zaczynać wyrażeń i podwyrażeń, ani występować bezpośrednio po znakach ^ i. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 21/75 Symbole - POSIX Atom Znaczenie (re) dopasowanie do re, gdzie re jest wyrażeniem regularnym. (kropka) pojedynczy znak [znaki] dopasowanie do jednego z wymienionych znaków \k dopasowanie do symbolu k traktowanego jako zwykły znak (k nie jest symbolem alfanumerycznym), np. \\ oznacza ukośnik wsteczny { jeżeli po { nie występuje cyfra, to jest to dopasowanie do znaku { x dopasowanie do znaku x (x jest zwykłym znakiem bez specjalnego znaczenia) Wyrażenie [^znaki] oznacza dopasowanie do dowolnego znaku nie znajdującego się na liście. Wyrażenie [znak1-znak2] oznacza zakres znaków, np [a-d] Nazwa klasy znaków umieszczona wewnątrz ograniczników [[: :]] oznacza listę wszystkich znaków należących do tej klasy. Dostępne nazwy klas to: alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper, xdigit. Wyrażenia [[:<:]] i [[:>:]] są specjalnymi ograniczeniami oznaczającymi dopasowanie odpowiednio do początku i końca słowa. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 22/75

12 Symbole - POSIX (cd) Krotność Znaczenie * 0 lub więcej wystąpień atomu + 1 lub więcej wystąpień atomu? 0 lub 1 wystąpień atomu {n} n wystąpień atomu {m,} co najmniej m wystąpień atomu {m,n} od m do n włącznie wystąpień atomu (m n) UWAGA: Parametry m i n mogą przyjmować wyłącznie wartości całkowite z zakresu od 0 do 255. Ograniczenie Znaczenie ^ dopasowanie do początku łańcucha znaków $ dopasowanie do końca łańcucha znaków Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 23/75 Porównywanie wzorców POSIX przykłady select nazwa from druzyny where nazwa ~* stal ; select iddruzyny, nazwa from druzyny where iddruzyny ~ b{2} ; select nazwa from druzyny where nazwa ~ BKS AZS MKS ; select nazwa from druzyny where nazwa ~ ^B ; select nazwa from druzyny where nazwa ~ S$ ; select nazwa from druzyny where nazwa ~ [[:<:]]B ; select nazwa from druzyny where nazwa ~ S[[:>:]] ; select nazwa from druzyny where nazwa ~ ^[^B].*[[:<:]]B ; select nazwa from druzyny where nazwa ~.{10} ; select miasto from druzyny where miasto ~ [c-e] ; select miasto from druzyny where miasto ~ [ce-] ; select miasto from druzyny where miasto ~ i[ae].*k ; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 24/75

13 Porównywanie wzorców POSIX przykłady select * from napisy where napis ~ [01]+ ; select * from napisy where napis ~ ^[01]+ ; select * from napisy where napis ~ ^[01]+$ ; select * from napisy where napis ~ ^(01)+$ ; select * from napisy where napis ~ ^(01)+.$ ; select * from napisy where napis ~ ^(01)+.*$ ; select * from napisy where napis ~ (10)+(01)+ ; select * from napisy where napis ~ (10)+.(01)+ ; select * from napisy where napis ~ la ; select * from napisy where napis ~.la ; select * from napisy where napis ~ ^.la ; select * from napisy where napis ~ ^..+la ; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 25/75 Rozszerzenie SQL języki proceduralne PostgreSQL umożliwia korzystanie z języków proceduralnych. Przed wykorzystaniem danego języka, należy wprowadzić w PostgreSQL ustawienia, włączające obsługę tego języka. Dla języka PL/pgSQL program obsługi jest dołączony w dystrybucji jako współdzielona biblioteka. Aby zainstalować język PL/pgSQL dla bazy danych, można skorzystać z polecenia create language w psql i załadować współdzieloną bibliotekę lub wykorzystać skrypt pomocniczy wywołany z konta użytkownika postgres. createlang plpgsql nazwa_bazy Informacje o załadowanych językach przechowywane są w tabeli pg_language. select * from pg_language; drop language nazwa_jezyka ; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 26/75

14 Funkcje create function nazwa ([typ_funkcji [,...]]) returns typ_wyniku as definicja language nazwa_języka Definicję funkcji podaje się jako pojedynczy ciąg znaków, który może obejmować kilka wierszy. Można go zapisać w dowolnym języku programowania obsługiwanym przez PostgreSQL jako ładowalny język proceduralny. Po utworzeniu funkcji, jej definicja jest zapisywana w bazie danych. Kiedy funkcja jest wywoływana po raz pierwszy, definicja funkcji jest kompilowana przez program obsługi do postaci wykonywalnej, a następnie wykonywana. Dopiero użycie funkcji pozwala na wykrycie jej ewentualnych błędów. PostgreSQL uznaje funkcje za różne, jeżeli mają one różne nazwy lub różną liczbę parametrów, albo parametry są innego typu. select prosrc from pg_proc where proname= nazwa_funkcji ; drop function nazwa_funkcji; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 27/75 PL/pgSQL cechy języka Może być używany do definiowania funkcji użytkownika i procedur wyzwalanych. Rozszerza język SQL o struktury sterujące (instrukcje wyboru, pętle). Pozwala wykonywać złożone obliczenia. Pozwala na zgrupowanie ciągu instrukcji SQL w ramach pojedynczej funkcji przechowywanej po stronie serwera (ograniczenie danych przesyłanych między serwerem i klientem nie są przesyłane dane pośrednie). Funkcje pisane w PL/pgSQL mogą przyjmować jako argumenty i zwracać jako wyniki wartości typów skalarnych i tablicowych akceptowanych przez serwer. Możliwa jest również obsługa typów złożonych (rekordów), polimorficznych, zbiorów rekordów, a nawet tabel. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 28/75

15 PL/pgSQL PL/pgSQL to język blokowo-strukturalny, podobny do języka Pascal lub C, z deklaracjami zmiennych i zakresami bloków. Każdy blok ma opcjonalną etykietę, może posiadać kilka deklaracji zmiennych i zamyka instrukcje tworzące blok pomiędzy słowami kluczowymi oraz end. [<<etykieta>>] declare deklaracje instrukcje end; W języku PL/pgSQL wielkość liter nie ma znaczenia. Funkcje PL/pgSQL mogą nie mieć argumentów lub mogą mieć ich kilka (możliwe jest definiowanie funkcji ze zmienną liczbą argumentów). Typ parametrów podaje się w nawiasach, po nazwie funkcji. Można stosować wbudowane typy PostgreSQL, takie jak int4 lub float8. Jeżeli nie podamy nazw parametrów, to odwołania do parametrów wewnątrz treści funkcji mają postać $1, $2 itd., w kolejności ich definiowania. Typ zwracanego wyniku określa się w klauzuli returns definicji funkcji. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 29/75 Funkcje przykład create function zysk(cena numeric(7,2)) returns numeric(7,2) as if cena < then return 0.05 * cena; elseif cena >= and cena <= then return 0.07 * cena; else return 0.08 * cena; end if; end; language plpgsql; drop function zysk(numeric(7,2)); create or replace function zysk(cena numeric(7,2)) returns numeric(7,2) as... Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 30/75

16 Zgłaszanie komunikatów i wyjątków create function zysk2(cena numeric(7,2)) returns numeric(7,2) as if cena <= 0.00 then raise exception Niepoprawna cena: %., $1; else raise notice Obliczenia dla wartości: %., $1; end if; if cena < then return 0.05 * cena; elsif cena >= and cena <= then return 0.07 * cena; else return 0.08 * cena; end if; end; language plpgsql; select zysk2(-23.00); -- ERROR: Niepoprawna cena: Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 31/75 Instrukcje warunkowe if wyrazenie_logiczne then instrukcje [ elsif wyrazenie_logiczne then instrukcje... ] [ else instrukcje ] end if; case wyrazenie when wyrazenie [, wyrazenie [...]] then instrukcje [ when wyrazenie [, wyrazenie [...]] then instrukcje... ] [ else instrukcje ] end case; case when wyrazenie_logiczne then instrukcje [ when wyrazenie_logiczne then instrukcje... ] [ else instrukcje ] end case; case x when 1, 2 then y := 0; when 3, 4, 5 then y := 1; else y := 2; end case; case when x between 0 and 1 then y := 0; when x between 2 and 5 then y := 1; else y := 2; end case; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 32/75

17 Deklarowanie zmiennych Wszystkie zmienne muszą zostać zadeklarowane w bloku deklaracji przed ich użyciem. Wyjątkiem są iteratory pętli for (całkowite i kursory). n integer; w numeric(7,2); pudelko pudelka%rowtype; id pudelka.nazwa%type; element record; name [constant] type [not null] [{ default := } expression]; Jeżeli nie użyto default, to zmienne początkowo mają przypisane null. Zmienne, którym dodano ograniczenie not null, muszą mieć ustawioną wartość domyślną. Wartość domyślna jest ustawiana zawsze przy wejściu do danego bloku. Jeżeli definiując funkcję nie podano nazw parametrów, to w bloku deklaracji można zdefiniować dla nich aliasy. id alias for $1 Jako nazw zmiennych (parametrów) nie należy używać nazw tabel i kolumn tych tabel. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 33/75 Przypisanie Operator przypisania: zmienna := wartość Operacje przypisania są wykonywane przez serwer PostgreSQL jako instrukcje select nawet, gdy używany jest operator :=. Poprzez dołączenie klauzuli from można wykorzystać select do przypisywania zmiennym wartości z bazy danych. Należy zapewnić, że instrukcja select zwróci tylko jeden wiersz, ponieważ dodatkowe wiersze zostaną pominięte bez wyświetlania jakichkolwiek komunikatów, zaś do zmiennej będzie przypisany tylko pierwszy zwrócony wiersz. create or replace function suma_zamowien(klient text) returns numeric(7,2) as declare w numeric(7,2); select sum(cena) into w from zamowienia where idnadawcy = klient; return w; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 34/75

18 Rekordy Rekord jest rodzajem typu złożonego, który w czasie deklarowania zmiennej nie opiera się na konkretnej tabeli. Zawiera on pola, które są zgodne w czasie wykonania z przypisaną do niego wartością. Rekordy można wykorzystać do zapisywania wyników instrukcji select. Należy zapewnić, że instrukcja select zwróci tylko jeden wiersz, ponieważ dodatkowe wiersze zostaną pominięte bez wyświetlania jakichkolwiek komunikatów, zaś do zmiennej będzie przypisany tylko pierwszy zwrócony wiersz. Istnieje możliwość, że instrukcja select nie zwróci żadnego wiersza. W takim przypadku operacja przypisanie nie będzie wykonana. W PostgreSQL występuje zmienna logiczna found, która jest dostępna natychmiast po wykonaniu operacji przypisania z wykorzystaniem instrukcji select into. wynik record; select * into wynik from klienci where idklienta = 9; if not found then -- dzialania awaryjne end if; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 35/75 Pętle (1) Najprostszą pętlą jest pętla niekontrolowana, która wykonuje się nieskończenie, o ile nie zamieścimy wewnątrz instrukcji exit lub return. [<<etykieta>>] loop instrukcje end loop; Wszystkie konstrukcje loop mogą posiadać etykiety, które są wykorzystywane w instrukcji exit. Instrukcja ta powoduje zakończenie odpowiedniej pętli. Etykieta musi odnosić się do bieżącej pętli lub do pętli zewnętrznej. Jeżeli etykieta nie jest określona, zakończona zostaje pętla bieżąca. Jeżeli występuje klauzula when, instrukcja exit nie wykonuje się, chyba że wartością wyrażenia jest true. Podobnie funkcjonuje instrukcja continue. <<infinite>> loop n := n + 1; exit infinite when n >= 10; end loop; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 36/75

19 Pętle (2) while wyrazenie loop instrukcje end loop; for nazwa in [reverse] od.. do loop instrukcje end loop; for wiersz in select... loop instrukcje end loop; Dla każdego z wierszy zwracanego przez instrukcję select, zmienna wiersz przyjmuje wartość tego wiersza, po czym wykonywane są instrukcje. Zmienną wykorzystywaną do zapamiętania wiersza należy wcześniej zadeklarować jako record lub rowtype. Ostatni przetworzony wiersz będzie dostępny również po zakończeniu wykonywania pętli lub przerwaniu jej działania za pomocą instrukcji exit. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 37/75 Zwracanie wartości przez funkcję (1) Jeżeli funkcja zwraca pojedynczą wartość, to używana jest instrukcja return wyrażenie. Kończy ona jednocześnie wykonywanie funkcji. Funkcje mogą być deklarowane z argumentami wyjściowymi. Pozwala to zwrócić funkcji więcej niż jeden wynik. W takim przypadku użycie return (bez wartości) kończy wykonanie funkcji podobnie, jeśli funkcja zwraca wartość typu void. Ponadto w przypadku tych funkcji użycie return nie jest konieczne. create or replace function podsumowanie(nr int, druzyna varchar, out mecze int, out srednia numeric) as select count(idmeczu), avg(punkty) into mecze, srednia from siatkarki natural join punktujace where numer = nr and iddruzyny = druzyna group by numer, iddruzyny; end language plpgsql; select podsumowanie(1, musz ); -- (15, ) Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 38/75

20 Pętle przykład create or replace function wynik(f_idmeczu smallint, out f_gospodarze smallint, out f_goscie smallint) as declare t_gospodarze smallint[]; t_goscie smallint[]; i smallint; f_gospodarze := 0; f_goscie := 0; select gospodarze into t_gospodarze from statystyki where idmeczu = f_idmeczu; select goscie into t_goscie from statystyki where idmeczu = f_idmeczu; i := 1; while t_gospodarze[i] is not null loop if t_gospodarze[i] > t_goscie[i] then f_gospodarze := f_gospodarze + 1; else f_goscie := f_goscie + 1; end if; i := i + 1; end loop; end language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 39/75 Zwracanie wartości przez funkcję (2) Funkcja jako wynik może zwracać tabelę. Jest to równoważne zdefiniowaniu kilku argumentów wyjściowych i określenia wyniku funkcji jako setof typ. UWAGA: Nazwy kolumn zwracanej tabeli nie mogą pokrywać się z nazwami kolumn tabeli, na której oparto zapytanie. create or replace function wyniki_sezonu() returns table (f_numer smallint, f_iddruzyny varchar(5), f_imie varchar(12), f_nazwisko varchar(30), f_idmeczu smallint, f_punkty smallint) as return query select numer, iddruzyny, imie, nazwisko, idmeczu, punkty from siatkarki natural join punktujace; end language plpgsql; select wyniki_sezonu(); Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 40/75

21 Typy polimorficzne PostgreSQL dostarcza typy polimorficzne: anyelement (dowolny typ), anyarray (dowolny typ tablicowy), anynonarray (dowolny typ nietablicowy), i anyenum (dowolny typ wyliczeniowy). Dowolna funkcja stosująca te typy określana jest jako polimorficzna. Funkcja taka może pracować na równych typach danych, a aktualne typy są wnioskowane na podstawie argumentów. Funkcja może mieć określone jako argumenty kilka wartości np. typu anyelement, ale przy konkretnym jej wywołaniu wszystkie one muszą mieć jeden wspólny typ danych. Jeżeli w definicji funkcji pojawiają się argumenty anyelement i anyarray, to przy konkretnym jej wywołaniu typy tablicowe muszą być tablicami typu skojarzonego z anyelement itd. Jeżeli funkcja zwraca jako wynik typ polimorficzny, to jeden z jej argumentów musi być typu polimorficznego. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 41/75 Zwracanie wartości przez funkcję (3) Jeżeli funkcja ma określony typ wyniku jako polimorficzny, to jest on reprezentowany przez specjalny parametr $0. Jest on inicjowany wartością null. create function add_three_values(v1 anyelement, v2 anyelement, v3 anyelement) returns anyelement as declare result alias for $0; result := v1 + v2 + v3; return result; end; language plpgsql; create function add_three_values(v1 anyelement, v2 anyelement, v3 anyelement, out result anyelement) as result := v1 + v2 + v3; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 42/75

22 Zwracanie wartości przez funkcję (4) Funkcja jako wynik może zwrócić zbiór rekordów. create temporary table wyniki (mecz smallint, punkty smallint); create or replace function punkty_w_meczach(f_numer int, f_iddruzyny varchar) returns setof wyniki as return query select idmeczu, punkty from punktujace where numer = f_numer and iddruzyny = f_iddruzyny; end language plpgsql; create or replace function punkty_w_meczach_2(f_numer int, f_iddruzyny varchar, out f_idmeczu smallint, out f_punkty smallint) returns setof record as return query select idmeczu, punkty from punktujace where numer = f_numer and iddruzyny = f_iddruzyny; end language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 43/75 Zwracanie wartości przez funkcję (5) Użycie return query (podobnie return next) nie powoduje wyjścia z funkcji, ale dodaje tylko kolejny wiersze (lub wiersz) do wyniku. Obie konstrukcje mogą wystąpić w ramach jednej funkcji w dowolnej kolejności. Jeżeli funkcja używa parametrów wyjściowych, to użycie return next (bez argumentu) powoduje dodanie do zbioru wynikowego rekordu z aktualnymi wartościami parametrów wyjściowych. create or replace function lista_meczow(f_iddruzyny varchar) returns setof smallint as return query select idmeczu from mecze where gospodarze = f_iddruzyny; return query select idmeczu from mecze where goscie = f_iddruzyny; return next 100; end language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 44/75

23 Zastosowanie funkcji przykłady select idmeczu, d1.nazwa gospodarze, d2.nazwa goscie, wynik(idmeczu) from druzyny d1 join mecze m on d1.iddruzyny = m.gospodarze join druzyny d2 on d2.iddruzyny = m.goscie order by idmeczu; select idmeczu, d1.nazwa gospodarze, d2.nazwa goscie, (wynik(idmeczu)).f_gospodarze from druzyny d1 join mecze m on d1.iddruzyny = m.gospodarze join druzyny d2 on d2.iddruzyny = m.goscie order by idmeczu; select idmeczu, d1.nazwa gospodarze, d2.nazwa goscie, (s.w).f_gospodarze gosp, (s.w).f_goscie gosc from druzyny d1 join mecze m on d1.iddruzyny = m.gospodarze join druzyny d2 on d2.iddruzyny = m.goscie join (select idmeczu, wynik(idmeczu) w from statystyki) as s using(idmeczu) order by idmeczu; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 45/75 Funkcje przykład (1) create or replace function suma_zamowien(nazwa varchar(10), dni integer) returns numeric(7,2) as declare w1 numeric(7,2); w2 numeric(7,2); select into w1 sum(cena) from zamowienia where idklienta = nazwa; select into w2 sum(cena) from historia where idklienta = nazwa and termin >= Now()::date - dni; if w1 is null then w1 := 0.00; end if; if w2 is null then w2 := 0.00; end if; w1 := w1 + w2; return w1; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 46/75

24 Funkcje przykład (2) create or replace function rabat(nazwa varchar(10)) returns numeric(7,2) as declare w1 numeric(7,2); w2 numeric(7,2); w1 := suma_zamowien(nazwa,7); w2 := case when w1 <= then 0.05 when w1 > and w1 <= then 0.10 when w1 > and w1 <= then 0.15 else 0.20 end; return w2; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 47/75 Funkcje przykład (3) create function podwyzka() returns void as declare wiazanka kompozycje%rowtype; for wiazanka in select * from kompozycje loop if wiazanka.cena < 50 then update kompozycje set cena = wiazanka.cena + 5 where idkompozycji = wiazanka.idkompozycji; elseif wiazanka.cena >= 50 and wiazanka.cena <= 100 then update kompozycje set cena = wiazanka.cena + 10 where idkompozycji = wiazanka.idkompozycji; else update kompozycje set cena = wiazanka.cena + 20 where idkompozycji = wiazanka.idkompozycji; end if; end loop; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 48/75

25 Funkcje przykład (4) create function punkty_zdobyte(druzyna varchar(5), mecz smallint) returns smallint as declare id varchar(5); pkt smallint := 0; select gospodarze into id from mecze where idmeczu = mecz; if id = druzyna then select gospodarze[1] + gospodarze[2] + gospodarze[3] + coalesce(gospodarze[4], 0) + coalesce(gospodarze[5], 0) into pkt from statystyki where idmeczu = mecz; else select goscie into id from mecze where idmeczu = mecz; if id = druzyna then select goscie[1] + goscie[2] + goscie[3] + coalesce(goscie[4], 0) + coalesce(goscie[5], 0) into pkt from statystyki where idmeczu = mecz; end if; end if; return pkt; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 49/75 Funkcje przykład (5) -- 3 pkt. - zwycięstwo -- 2 pkt. - zwycięstwo 3:2 w setach -- 1 pkt. - porażka 2:3 w setach -- 0 pkt. - porażka create function punkty_za_mecz(druzyna varchar(5), mecz smallint) returns smallint as declare id varchar(5); sety_druzyna smallint; sety_przeciwnik smallint; select gospodarze into id from mecze where idmeczu = mecz; if id = druzyna then select (wynik(mecz)).f_gospodarze, (wynik(mecz)).f_goscie into sety_druzyna, sety_przeciwnik; else select goscie into id from mecze where idmeczu = mecz; if id = druzyna then select (wynik(mecz)).f_gospodarze, (wynik(mecz)).f_goscie into sety_przeciwnik, sety_druzyna; end if; end if; if sety_druzyna is not null then if sety_druzyna < 2 then return 0; elseif sety_druzyna = 2 then return 1; elseif sety_przeciwnik = 2 then return 2; else return 3; end if; else return 0; end if; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 50/75

26 Funkcje przykład zastosowania select nazwa as druzyna, count(idmeczu) as mecze, sum(punkty_za_mecz(iddruzyny,idmeczu)) as punkty, sum(punkty_zdobyte(iddruzyny,idmeczu)) - sum(punkty_stracone(iddruzyny,idmeczu)) as "male punkty" from druzyny join mecze on (iddruzyny = gospodarze or iddruzyny = goscie) where idmeczu <= 20 group by nazwa order by 3 desc; druzyna mecze punkty male punkty Bank BPS Muszynianka Fakro ENION Energia MKS BKS Aluprof GCB Centrostal IMPEL Gwardia PTPS Piła Pronar Zeto Astwa AZS Organika Budowlani KPSK Stal Gedania (10 wierszy) Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 51/75 Wyzwalacze (1) Wykorzystanie procedury wyzwalanej (ang. trigger) pozwala na automatyczne uruchamianie procedury zapisanej w bazie danych, jeżeli dla określonej tabeli będą podjęte takie działania, jak: insert, update oraz delete. Aby wykorzystać procedurę wyzwalaną, najpierw należy zdefiniować procedurę, a następnie utworzyć sam wyzwalacz, który określa, kiedy procedura wyzwalana będzie wykonywana. create trigger nazwa {before after} {zdarzenie [or...]} on table for each {row statement} execute procedure funkcja(argumenty) Wyzwalacz w istocie informuje: Uruchom tę procedurę przechowywana w bazie danych za każdym razem, kiedy dla tej tabeli zachodzi w bazie danych określone zdarzenie. Wyzwalacz może mieć nazwę, którą można wykorzystać do jego usunięcia, kiedy nie będzie już potrzebny, poprzez wykonanie polecenia: drop trigger nazwa on tabela; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 52/75

27 Wyzwalacze (2) Wyzwalacz zadziała, kiedy zajdzie określone zdarzenie. Można zażądać, by zadziałał on po zajściu zdarzenia, kiedy to wywoływana procedura będzie miała dostęp do danych pierwotnych (dla aktualizacji i usunięcia) oraz nowych danych (dla wstawiania i aktualizacji). Można także zażądać, by zadziałał przed zajściem zdarzenia. Jeśli aktualizacja wielu wierszy spowoduje działanie wyzwalacza, można wybrać, czy wyzwalacz ma działać dla każdego aktualizowanego wiersza (row), czy też raz dla całej operacji aktualizacji (statement). Wyzwalacz działa w momencie, kiedy są spełnione określone warunki i wykonuje tzw. procedurę wyzwalaną. Procedurę wyzwalaną tworzy się jako funkcję bez parametrów (jeśli w definicji wyzwalacza jest inaczej, to argumenty przekazuje się przez TG_ARGV) oraz o specjalnym typie wyniku trigger. Procedura musi zwracać wartość null lub wiersz odpowiadający strukturze tabeli, dla której ją uruchomiono. Dla wyzwalaczy typu after, które wykonuje się po operacji update, zaleca się, aby procedura wyzwalana zwracała wartość null. Dla wyzwalaczy typu before, zwracany wynik wykorzystuje się do sterowania aktualizacją, która ma być wykonana. Jeżeli procedura wyzwalana zwraca null, operacja update nie jest wykonywana, jeżeli zwracany jest wiersz danych, jest on wykorzystywany jako źródło aktualizacji, dając okazję procedurze wyzwalanej do zmiany danych przed zatwierdzeniem ich w bazie danych. W przypadku wyzwalaczy typu statement funkcja powinna zwracać null. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 53/75 Zmienne dostępne w procedurach wyzwalanych NEW Rekord zawierający nowy wiersz bazy danych. OLD Rekord zawierający stary wiersz bazy danych. TG_NAME Zmienna tekstowa, zawierająca nazwę wyzwalacza, który zadziałał i spowodował wykonanie procedury wyzwalanej. TG_WHEN Zmienna tekstowa zawierająca tekst BEFORE lub AFTER, w zależności od typu wyzwalacza. TG_LEVEL Zmienna tekstowa zawierająca tekst ROW lub STATEMENT, w zależności od definicji wyzwalacza. TG_OP Zmienna tekstowa zawierająca INSERT, DELETE lub UPDATE, w zależności od zdarzenia, które wywołało wyzwalacz. TG_RELID Identyfikator obiektu reprezentujący tabelę, dla której uaktywniono wyzwalacz. TG_RELNAME Nazwa tabeli, dla której uaktywniono wyzwalacz. TG_NARGS Zmienna całkowita, zawierająca liczbę argumentów określonych w definicji wyzwalacza. TG_ARGV Tablica ciągów znaków, zawierająca parametry procedury, rozpoczynająca się od indeksu 0. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 54/75

28 Wyzwalacze przykład (1) create function fn_zapotrzebowanie() returns trigger as declare s integer; update kompozycje set stan = stan - 1 where idkompozycji = new.idkompozycji; select into s stan from kompozycje where idkompozycji = new.idkompozycji; if s = 1 then insert into zapotrzebowanie values(new.idkompozycji, current_date, null); end if; return null; end; language plpgsql; create trigger tr_zapotrzebowanie after insert on Zamowienia for each row execute procedure fn_zapotrzebowanie(); Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 55/75 Wyzwalacze przykład (2) drop function fn_dostawa(); drop trigger tr_dostawa on kompozycje; create function fn_dostawa() returns trigger as if new.stan > 1 then delete from zapotrzebowanie where idkompozycji = new.idkompozycji; end if; return new; end; language plpgsql; create trigger tr_dostawa after update on kompozycje for each row execute procedure fn_dostawa(); Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 56/75

29 Tworzenie funkcji agregujących tylko PostgreSQL create aggregate nazwa ( typ_danych_wejsciowych [,... ] ) ( sfunc = funkcja_zmiany_stanu, stype = typ_stanu [, finalfunc = funkcja_finalna ] [, initcond = warunek_poczatkowy ] [, sortop = operator_sortowania ] -- dla agregatów typu ) -- min, max Funkcja agregująca jest identyfikowana na podstawie swojej nazwy i typów argumentów (możliwe jest przeładowanie nazwy). Jej nazwa i typy argumentów nie mogą się również pokrywać z nazwą i typami argumentów innych (nieagregujących) funkcji. Zmienna lokalna typu stype przechowuje wynik cząstkowy. Dla każdej nowej wartości w grupie, stan wewnętrzny jest aktualizowany w oparciu o funkcję zmiany stanu. Dodatkowo na końcu obliczeń jednorazowo stosowana jest funkcja finalna (jeżeli ją określono). Warunek początkowy definiuje stan wyjściowy (w przypadku jego braku używane jest null)). sfunc: (internal_state, next_data_values) next_internal_state ffunc: internal_state aggregate_value Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 57/75 Funkcji agregujące iloczyn elementów create table liczby ( id integer primary key, kategoria char, w1 integer, w2 numeric(6,2), w3 float ); create function product_state(anyelement, anyelement) returns anyelement as return $1 * $2; end; language plpgsql; create aggregate product(anyelement) ( sfunc = product_state, stype = anyelement, initcond = 1 ); select kategoria, product(w1), product(w2), product(w3) from liczby group by kategoria; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 58/75

30 Funkcji agregujące średnia geometryczna (1) n n x i i=1 create aggregate geometric_mean(double precision) ( sfunc = geometric_mean_state, stype = double precision[], finalfunc = geometric_mean_final, initcond = {1,0} ); select kategoria, geometric_mean(w1) from liczby group by kategoria order by kategoria; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 59/75 Funkcji agregujące średnia geometryczna (2) n n x i create function geometric_mean_state(double precision[], double precision) returns double precision[] as return array[ $1[1] * $2, $1[2] + 1]; end; language plpgsql; i=1 create or replace function geometric_mean_final(double precision[]) returns double precision as if $1[2] = 0 then return null; else return $1[1] ^ (1 / $1[2]); end if; end; language plpgsql; Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 60/75

31 Funkcji agregujące średnia harmoniczna (1) create aggregate harmonic_mean(double precision) ( sfunc = harmonic_mean_state, stype = double precision[], finalfunc = harmonic_mean_final, initcond = {0,0} ); n n i=1 select harmonic_mean_state( {2,3},2); select harmonic_mean_final( {4,3} ); select kategoria, harmonic_mean(w1) from liczby group by kategoria order by kategoria; 1 x i Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 61/75 Funkcji agregujące średnia harmoniczna (2) create function harmonic_mean_state(double precision[], double precision) returns double precision[] as return array[ $1[1] + (1/$2), $1[2] + 1]; end; language plpgsql; n n i=1 create or replace function harmonic_mean_final(double precision[]) returns double precision as if $1[2] = 0 then return null; else return $1[2] / $1[1]; end if; end; language plpgsql; 1 x i Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 62/75

32 Transakcje Transakcja jest kolekcją złożoną z jednej lub kilku operacji w bazie danych, które należy wykonać wszystkie lub nie wykonywać żadnej z nich. SQL rozpoczyna transakcję; commit pomyślne zakończenie transakcji wszystkie zmiany w bazie danych przeprowadzone w ramach transakcji zostają zatwierdzone (wcześniej były tymczasowe). rollback porzucenie wszystkie zmiany w bazie danych przeprowadzone w ramach transakcji zostają wycofane. Uwaga: W PostgreSQL nie wolno zagnieżdżać transakcji. Jeżeli spróbujemy wykonać instrukcję podczas trwania transakcji, PostgreSQL wyświetli komunikat informujący, że transakcja jest w toku. Transakcje powinny być niewielkie. Należy także unikać sytuacji, w których transakcja trwa wówczas, gdy jest potrzebny dialog z użytkownikiem. Zaleca się, aby najpierw zebrać od użytkownika wszystkie potrzebne informacje, a następnie przetworzyć je w transakcji, niezależnie od odpowiedzi użytkownika, których nie da się przewidzieć. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 63/75 ACID własności transakcji Niepodzielna (Atomic) Transakcja, mimo że jest zbiorem działań, musi być wykonywana jako pojedyncza jednostka. Transakcja musi odbywać się dokładnie w jednym momencie i nie może dzielić się na podzbiory. Spójna (Consistent) Po zakończeniu wykonywania transakcji system musi być spójny, (ograniczenie powinno być sprawdzone na końcu transakcji). Odizolowana (Isolated) Oznacza to, że każda transakcja, bez względu na to, ile transakcji w danym momencie wykonuje się w bazie danych, musi być niezależna od wszystkich innych transakcji. Trwała (Durable) Po wykonaniu transakcji musi ona zostać utrwalona. W PostgreSQL wykonuje się to za pomocą pliku dziennika transakcji. W czasie wykonywania transakcji zmiany są zapisywane nie tylko do bazy danych, ale także do pliku dziennika. Po zakończeniu transakcji zapisywany jest znacznik, który informuje, że transakcja została zakończona i dane z dziennika transakcji zostały zatwierdzone do zapisu na stałe do bazy danych. Gwarantuje to bezpieczeństwo tych danych, nawet w przypadku awarii bazy danych. Jeżeli z pewnych powodów serwer bazy danych przestanie działać w trakcie transakcji, po ponownym jego uruchomieniu istnieje możliwość automatycznego sprawdzenia, czy zakończone transakcje zostały właściwie odzwierciedlone w bazie danych. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 64/75

33 Brudne dane W bazie danych możemy zablokować zmodyfikowane w ramach transakcji zmiany do czasu wykonania instrukcji commit lub rollback. Mechanizm ten zapobiega widoczności tymczasowych zmian w innych transakcjach. Istnieje możliwość, że zmodyfikowane dane będą widoczne dla innych transakcji, pomimo że mogą później zostać usunięte z bazy danych po wykonaniu instrukcji rollback. Autor transakcji decyduje, czy widoczność tymczasowych zmian dla innych transakcji jest bezpieczna, czy nie. Brudne dane to dane zapisane w transakcji, ale jeszcze nie zatwierdzone. Brudny odczyt to odczyt brudnych danych zapisanych przez inną transakcję. SQL ustawienie poziomu izolacji set transaction read write; set transaction isolation level read uncommitted; Uwaga: W PostgreSQL odczyt brudnych danych nie jest możliwy, nawet jeżeli ustawimy poziom izolacji na read uncommitted (odczyt niezatwierdzony). Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 65/75 Poziomy izolacji read committed (odczyt zatwierdzony) Poziom ten nie zezwala na odczyt brudnych danych, ale pozwala widzieć zmiany zatwierdzone między czasie przez inne transakcje, tj. w ramach transakcji wykonanie tego samego zapytania wielokrotnie może dawać różne wyniki. repeatable read (odczyt powtarzalny) Poziom ten gwarantuje, że po pobraniu krotki po raz pierwszy, w przypadku ponowienia zapytania otrzymamy identyczną krotkę. Samo powtarzane zapytanie nie musi zwracać za każdym razem tego samego zbioru krotek. Możliwe jest, że w kolejnych powtórzeniach zapytania dostaniemy krotki widma (phantom tuples), tj. krotki wstawione do bazy w trakcie działania transakcji. serializable (odczyt uszeregowany) Poziom ten wyklucza możliwość wystąpienia wszystkich omawianych zjawisk niepożądanych tj.: brudnych odczytów, odczytów nie dających się powtórzyć i odczytów widmo. Transakcja jest wykonywana tak, jakby wszystkie inne równolegle wykonywane transakcje były realizowane przed lub po rozważanej transakcji. Domyślnym trybem izolacji w PostgreSQL jest read committed. System może równolegle wykonywać wiele transakcji, dla których określono różne poziomy izolacji. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 66/75

34 Zakleszczenia Jeżeli PostgreSQL wykryje zakleszczenie, tzn. dwie czekające jedna na drugą, zablokowane sesje, z których żadna nie może kontynuować działania, to jedna sesja zostanie przerwana, a druga będzie kontynuować działanie. Nie ma sposobu, aby z góry przewidzieć, którą sesję przerwie PostgreSQL. System spróbuje wybrać tę sesję, która wykonuje mniej istotne zmiany. Transakcja 1 Transakcja 2 Komentarz update wiersz 64 update wiersz 83 niezależne update wiersz 83 czeka na zwolnienie 83 update wiersz 64 czeka na zwolnienie 64 auto-rollback automatyczne przerwanie commit Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 67/75 Użytkownicy baz danych PostgreSQL zarządza dostępem do baz danych korzystając z koncepcji roli, która może być zarówno pojedynczym użytkownikiem, jak również grupą użytkowników. Koncepcja roli zastępuje koncepcje użytkownika i grupy użytkowników. Każde połączenie z bazą danych jest realizowane z użyciem nazwy jakiejś roli, zaś uprawnienia przypisane do tej roli decydują jakie operacje na bazie danych będzie można wykonać. SQL create role nazwa; create role nazwa login; drop role nazwa; -- create user nazwa; select rolname from pg_roles; Uwaga: Nazwy użytkowników (role) w systemie PostgreSQL są całkowicie niezależne od nazw użytkowników w systemie operacyjnym. Superużytkownik systemu PostgreSQL (rola tworzona na etapie instalacji) ma nazwę postgres. Tylko rola zdefiniowana z atrybutem login może zostać użyta do połączenia z bazą danych. Marcin Szpyrka Bazy danych Zaawansowane przetwarzanie danych 68/75

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

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

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

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.

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. PROCEDURY 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. \df Aby wyświetlić wszystkie funkcje z argumentami

Bardziej szczegółowo

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika Programowanie w SQL procedury i funkcje UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika 1. Funkcje o wartościach skalarnych ang. scalar valued

Bardziej szczegółowo

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

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

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 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze 1 Funkcje i procedury pamiętane Następujące polecenie tworzy zestawienie zawierające informację o tym ilu jest na naszej hipotetycznej

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

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

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

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

Przestrzenne bazy danych Podstawy języka SQL

Przestrzenne bazy danych Podstawy języka SQL Przestrzenne bazy danych Podstawy języka SQL Stanisława Porzycka-Strzelczyk porzycka@agh.edu.pl home.agh.edu.pl/~porzycka Konsultacje: wtorek godzina 16-17, p. 350 A (budynek A0) 1 SQL Język SQL (ang.structured

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

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

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

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL, Mój projekt przedstawia bazę danych noclegów składającą się z 10 tabel. W projekcie wykorzystuje program LibreOffice Base do połączenia psql z graficznym interfejsem ( kilka formularzy przedstawiających

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

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

Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umożliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.

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

Microsoft SQL Server Podstawy T-SQL

Microsoft SQL Server Podstawy T-SQL Itzik Ben-Gan Microsoft SQL Server Podstawy T-SQL 2012 przełożył Leszek Biolik APN Promise, Warszawa 2012 Spis treści Przedmowa.... xiii Wprowadzenie... xv Podziękowania... xix 1 Podstawy zapytań i programowania

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

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

SQL :: Data Definition Language

SQL :: Data Definition Language SQL :: Data Definition Language 1. Zaproponuj wydajną strukturę danych tabela) do przechowywania macierzy o dowolnych wymiarach w bazie danych. Propozycja struktury powinna zostać zapisana z wykorzystaniem

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

BAZA DANYCH SIECI HOTELI

BAZA DANYCH SIECI HOTELI Paulina Gogół s241906 BAZA DANYCH SIECI HOTELI Baza jest częścią systemu zarządzającego pewną siecią hoteli. Składa się z tabeli powiązanych ze sobą różnymi relacjami. Służy ona lepszemu zorganizowaniu

Bardziej szczegółowo

SQL (ang. Structured Query Language)

SQL (ang. Structured Query Language) SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze

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

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

SQL 4 Structured Query Lenguage

SQL 4 Structured Query Lenguage Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...

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

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, 2016 Spis treści Wprowadzenie Podziękowania xiii xvii 1 Podstawy zapytań i programowania T-SQL 1 Podstawy

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

Zaawansowane bazy danych i hurtownie danych semestr I

Zaawansowane bazy danych i hurtownie danych semestr I Podprogramy Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych semestr I Procedury do przeprowadzenia akcji Funkcje do obliczania wartości Pakiety do zbierania logicznie

Bardziej szczegółowo

Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umoŝliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.

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

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

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych Języki programowania wysokiego poziomu PHP cz.4. Bazy danych PHP i bazy danych PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł

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

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

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

Hurtownia Świętego Mikołaja projekt bazy danych

Hurtownia Świętego Mikołaja projekt bazy danych Aleksandra Kobusińska nr indeksu: 218366 Hurtownia Świętego Mikołaja projekt bazy danych Zaprezentowana poniżej baza jest częścią większego projektu bazy danych wykorzystywanej w krajowych oddziałach wiosek

Bardziej szczegółowo

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście. Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

Bardziej szczegółowo

Wykład 6. SQL praca z tabelami 3

Wykład 6. SQL praca z tabelami 3 Wykład 6 SQL praca z tabelami 3 Łączenie wyników zapytań Język SQL zawiera mechanizmy pozwalające na łączenie wyników kilku pytań. Pozwalają na to instrukcje UNION, INTERSECT, EXCEPT o postaci: zapytanie1

Bardziej szczegółowo

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl Bazy danych Podstawy języka SQL Dr inż. Paweł Kasprowski pawel@kasprowski.pl Plan wykładu Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność danych Współbieżność

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

1. ELEMENTY JĘZYKA PL/SQL

1. ELEMENTY JĘZYKA PL/SQL 1. ELEMENTY JĘZYKA PL/SQL Aplikacje korzystające z PL/SQL będącego proceduralnym rozszerzeniem SQL mogą wykonywać procedury i funkcje języka PL/SQL składowane w bazie danych oraz wysyłać własne programy

Bardziej szczegółowo

Język SQL, zajęcia nr 1

Język SQL, zajęcia nr 1 Język SQL, zajęcia nr 1 SQL - Structured Query Language Strukturalny język zapytań Login: student Hasło: stmeil14 Baza danych: st https://194.29.155.15/phpmyadmin/index.php Andrzej Grzebielec Najpopularniejsze

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

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

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

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

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach Indeksy dodatkowe struktury służące przyśpieszeniu dostępu do danych o użyciu indeksu podczas realizacji poleceń decyduje SZBD niektóre systemy bazodanowe automatycznie tworzą indeksy dla kolumn o wartościach

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

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

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL, Informatyka sem. III studia inżynierskie Transport 2018/19 Lab 6 LAB 6 TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL, UPDATE, INSERT INTO, ALTER TABLE, CREATE VIEW, CREATE TRIGGER, FUNCTION,

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

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

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

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu. Plan wykładu Spis treści 1 Dynamiczny SQL 1 2 Wyzwalacze 2 3 Podsumowanie 9 4 Źródła 9 1 Dynamiczny SQL Dynamiczny SQL Dynamiczny SQL - technika programowania umożliwiająca generowanie instrukcji SQL dynamicznie

Bardziej szczegółowo

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15 T-SQL dla każdego / Alison Balter. Gliwice, cop. 2016 Spis treści O autorce 11 Dedykacja 12 Podziękowania 12 Wstęp 15 Godzina 1. Bazy danych podstawowe informacje 17 Czym jest baza danych? 17 Czym jest

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

P o d s t a w y j ę z y k a S Q L

P o d s t a w y j ę z y k a S Q L P o d s t a w y j ę z y k a S Q L Adam Cakudis IFP UAM Użytkownicy System informatyczny Aplikacja Aplikacja Aplikacja System bazy danych System zarządzania baz ą danych Schemat Baza danych K o n c e p

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

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3 Plan wykładu Spis treści 1 Przetwarzanie transakcyjne 1 1.1 Cechy transakcji................................. 2 1.2 Rozpoczęcie i zakończenie........................... 3 1.3 Punkty bezpieczeństwa.............................

Bardziej szczegółowo

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1 Bazy danych Wykład IV SQL - wprowadzenie Copyrights by Arkadiusz Rzucidło 1 Czym jest SQL Język zapytań deklaratywny dostęp do danych Składnia łatwa i naturalna Standardowe narzędzie dostępu do wielu różnych

Bardziej szczegółowo

przykłady problemów; realizacja dostaw części od producenta do klienta:

przykłady problemów; realizacja dostaw części od producenta do klienta: Przetwarzanie transakcyjne Transakcja zestaw operacji pod szczególną kontrolą transakcja to sekwencja operacji, która musi zakończyć się sukcesem w całości - w przeciwnym wypadku musi powrócić stan początkowy

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

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Tabele 9 Klucze 10 Relacje 11 Podstawowe zasady projektowania tabel 16 Rozdział 2. Praca z tabelami 25 Typy danych 25 Tworzenie tabel 29 Atrybuty kolumn

Bardziej szczegółowo

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

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, 2017 Spis treści O autorze 9 Wprowadzenie 11 Lekcja 1. Zrozumieć SQL 15 Podstawy baz danych 15 Język SQL

Bardziej szczegółowo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie

Bardziej szczegółowo

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

PRZESTRZENNE BAZY DANYCH WYKŁAD 2 PRZESTRZENNE BAZY DANYCH WYKŁAD 2 Baza danych to zbiór plików, które fizycznie przechowują dane oraz system, który nimi zarządza (DBMS, ang. Database Management System). Zadaniem DBMS jest prawidłowe przechowywanie

Bardziej szczegółowo

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi. Marek Robak Wprowadzenie do języka SQL na przykładzie baz SQLite Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi. Tworzenie tabeli Pierwsza tabela W relacyjnych bazach danych jedna

Bardziej szczegółowo

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych. Dr inż. Paweł Kasprowski Plan wykładu Bazy danych Podstawy relacyjnego modelu danych Dr inż. Paweł Kasprowski pawel@kasprowski.pl Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność

Bardziej szczegółowo

Przydatne sztuczki - sql. Na przykładzie postgres a.

Przydatne sztuczki - sql. Na przykładzie postgres a. Przydatne sztuczki - sql. Na przykładzie postgres a. M. Wiewiórko 05/2014 Plan Uwagi wstępne Przykład Rozwiązanie Tabela testowa Plan prezentacji: Kilka uwag wstępnych. Operacje na typach tekstowych. Korzystanie

Bardziej szczegółowo

BAZY DANYCH Cz III. Transakcje, Triggery

BAZY DANYCH Cz III. Transakcje, Triggery BAZY DANYCH Cz III Transakcje, Triggery Transakcje Definicja: Zbiór operacji (modyfikacja danych, usuwanie, wstawianie, tworzenie obiektów bazodanowych), które albo wszystkie kończone są sukcesem, albo

Bardziej szczegółowo

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych SQL SQL (ang. Structured Query Language): strukturalny język zapytań używany do tworzenia strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych

Bardziej szczegółowo

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

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9. Plan wykładu Spis treści 1 DML - zapytania, część II 1 1.1 Grupowanie................................... 1 1.2 Operatory zbiorowe............................... 5 2 DML - modyfikacja 7 3 DCL - sterowanie

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 6 Wprowadzenie Definiowanie wyzwalaczy DML Metadane wyzwalaczy Inne zagadnienia, tabele mutujące Wyzwalacze INSTEAD OF Wyzwalacze

Bardziej szczegółowo

Tabele wykorzystywane w przykładach

Tabele wykorzystywane w przykładach Tabele wykorzystywane w przykładach create table departamenty( dep_id serial primary key, nazwa_departamentu text ); Tabele używane w wybranych przkładach create table pracownicy ( emp_id serial primary

Bardziej szczegółowo

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

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion Autor: Joanna Karwowska SQL zapewnia obsługę: zapytań - wyszukiwanie danych w bazie, operowania danymi - wstawianie, modyfikowanie

Bardziej szczegółowo

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Podstawy języka SQL. SQL Structured Query Languagestrukturalny Podstawy języka SQL SQL Structured Query Languagestrukturalny język zapytań DDL Język definicji danych (np. tworzenie tabel) DML Język manipulacji danych (np. tworzenie zapytań) DCL Język kontroli danych

Bardziej szczegółowo

Struktura drzewa w MySQL. Michał Tyszczenko

Struktura drzewa w MySQL. Michał Tyszczenko Struktura drzewa w MySQL Michał Tyszczenko W informatyce drzewa są strukturami danych reprezentującymi drzewa matematyczne. W naturalny sposób reprezentują hierarchię danych toteż głównie do tego celu

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

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT Studia podyplomowe Inżynieria oprogramowania współfinansowane przez Unię Europejska w ramach Europejskiego Funduszu Społecznego Projekt Studia podyplomowe z zakresu wytwarzania oprogramowania oraz zarządzania

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

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

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

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE Język DML Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE Systemy Baz Danych, Hanna Kleban 1 INSERT Instrukcja INSERT dodawanie

Bardziej szczegółowo

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL Tutorial PostgreSQL 1. Instalacja na własnym komputerze: a. Zainstaluj program ze strony: https://www.postgresql.org/download/ Wersja odpowiednia dla systemu operacyjnego Linux, Mac, Windows Przy pierwszym

Bardziej szczegółowo

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła 050 SQL ELEMENTY ZAAWANSOWANE Prof. dr hab. Marek Wisła Deklarowanie zmiennych DECLARE @nazwa-zmiennej typ-danych {, @nazwazmiennej typ-danych}; deklaruje nazwy zmiennych lokalnych (definiowanych przez

Bardziej szczegółowo

Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/

Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Historia i standardy Podstawy relacyjności Typy danych DDL tabele, widoki, sekwencje zmiana struktury DML DQL Podstawy, złączenia,

Bardziej szczegółowo

Cele. Definiowanie wyzwalaczy

Cele. Definiowanie wyzwalaczy WYZWALACZE Definiowanie wyzwalaczy Cele Wyjaśnić cel istnienia wyzwalaczy Przedyskutować zalety wyzwalaczy Wymienić i opisać cztery typy wyzwalaczy wspieranych przez Adaptive Server Anywhere Opisać dwa

Bardziej szczegółowo

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu): Utwórz bazę danych Cw: CREATE DATABASE Cw Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu): DBCC USEROPTIONS Przykład z zapisem do tabeli tymczasowej: --Jeśli istnieje tabela tymczasowa

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

Politechnika Gdańska, międzywydziałowy kierunek INŻYNIERIA BIOMEDYCZNA. Instrukcja do laboratorium z przedmiotu: Bazy danych. Laboratorium nr 4.

Politechnika Gdańska, międzywydziałowy kierunek INŻYNIERIA BIOMEDYCZNA. Instrukcja do laboratorium z przedmiotu: Bazy danych. Laboratorium nr 4. Instrukcja do laboratorium z przedmiotu: Bazy danych Laboratorium nr 4. Funkcje własne, procedury wyzwalane i przetwarzanie transakcyjne Opracował A. Bujnowski 2010-04-08 Projekt Przygotowanie i realizacja

Bardziej szczegółowo

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; Zestaw ćwiczeń1 Dzięki DDL (Data Definition Language) można operować na strukturach, w których dane są przechowywane czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy

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

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

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10 Plan wykładu Spis treści 1 Wprowadzenie do bloków nazwanych 1 2 Parametry 2 3 Procedury i funkcje 3 4 Pakiety 6 5 Podsumowanie 10 6 Źródła 10 1 Wprowadzenie do bloków nazwanych Rodzaje bloków w PL/SQL

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