1. Dodatkowe informacje. 2. Czynnoci wstpne. 3. Zadania



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

BAZA DANYCH SIECI HOTELI

Hurtownia Świętego Mikołaja projekt bazy danych

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

PODSTAWY BAZ DANYCH 13. PL/SQL

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

SQL :: Data Definition Language

Bazy danych, 4. wiczenia

Wykład 8. SQL praca z tabelami 5

Język SQL, zajęcia nr 1

Systemowe aspekty baz

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

Wykład 5. SQL praca z tabelami 2

SQL 4 Structured Query Lenguage

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

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

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

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

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

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

Monika Sychla Daniel Smolarek Projekt bazy danych

Tworzenie bazy danych Biblioteka tworzenie tabel i powiza, manipulowanie danymi. Zadania do wykonani przed przystpieniem do pracy:

Systemowe aspekty baz danych

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

Bazy danych. Projekt prostej biblioteki. 26 stycznia Hubert Anisimowicz,

Zaawansowane bazy danych i hurtownie danych semestr I

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Projekt-bazy danych Poczta

Bazy danych programowanie Wykład dla studentów matematyk

Oracle PL/SQL. Paweł Rajba.

Baza danych hotel Maciej Gerus

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

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

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

Bazy danych. Polecenia SQL

Bazy danych. Dr inż. Paweł Kasprowski

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Pakiety podprogramów Dynamiczny SQL

Składowane procedury i funkcje

Aspekty aktywne baz danych

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

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

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

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

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

PL/SQL. Zaawansowane tematy PL/SQL

Wykład 6. SQL praca z tabelami 3

15. Funkcje i procedury składowane PL/SQL

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

Bartosz Jachnik - Kino

Imię i Nazwisko Data Ocena. Laboratorium 7

Bazy Danych i Usługi Sieciowe

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

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

1. Wyzwalacze BD (ang. triggers)

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

Cele. Definiowanie wyzwalaczy

Ref. 7 - Język SQL - polecenia DDL i DML

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Bazy danych 10. SQL Widoki

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Bazy danych 7. SQL podstawy

Relacyjne bazy danych. Podstawy SQL

Bazy danych i usługi sieciowe

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

BAZY DANYCH Cz III. Transakcje, Triggery

CREATE USER

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

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

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

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

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Struktura bazy danych

Wykład 05 Bazy danych

Tabele wykorzystywane w przykładach

Relacyjne bazy danych. Podstawy SQL

Wyzwalacze (triggery) Przykład

Procedury i funkcje składowane

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

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.

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

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

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

Programowanie w języku Java. Bazy danych SQLite w Javie

Bazy danych. dr inż. Arkadiusz Mirakowski

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

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

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

Zadania do wykonaj przed przyst!pieniem do pracy:

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

Projektowanie systemów baz danych

Transkrypt:

1. Dodatkowe informacje 1.1. Kade zdanie SQL musi by zakoczone rednikiem (;). 1.2. Odwołanie do argumentu funkcji w ciele funkcji jest postaci $n, gdzie n jest numerem argumentu. 2. Czynnoci wstpne 2.1. Zalogowa si do systemu Windows (np. jako uytkownik lab do domeny ZTI). 2.2. Uruchomi serwis Postgresa klikajc: START PROGRAMY PostgreSQL wersja Start Service 2.3. Uruchomi narzdzie do administracji systemem: START PROGRAMY PostgreSQL versja pgadminiii 2.4. Dwukrotnie klikn na serwer Postgresa widoczny w lewym panelu okna: 2.5. Utworzy przy pomocy menu kontekstowego now baz danych o nazwie TBDX, gdzie X jest numerem podanym przez prowadzcego wiczenie (Uwaga! Zamiast kodowania UNICODE mona wybra np. LATIN1): 2.6. Otworzy okno zapyta SQL, poprzez nacinicie przycisku 3. Zadania 3.1. Poleceniem create table utworzy tabel o nastpujcej strukturze:

Osoby (imie varchar(15), nazwisko varchar(15), PESEL varchar(11), data_ur timestamp) 3.2. Utworzy dodatkow tabel Pracownicy, wykorzystujc polecenie: create table Pracownicy (nr_prac integer, nr_zesp integer, pensja real) INHERITS (Osoby); 3.3. Wpisa 3 rekordy do tabeli Osoby: Jan Nowak 11111111111 01-01-1988 Adam Kowalski 22222222222 01-10-1989 Anna Krol 33333333333 10-15-1990 3.4. Wpisa 2 rekordy do tabeli Pracownicy: Tomasz Wicek 44444444444 12-12-1978 1 10 1990 Maria Bialek 55555555555 12-12-1980 2 10 1991 3.5. Wywietli (poleceniem select) dane o tabelach Osoby i Pracownicy wpisane do perspektywy pg_tables, dodajc fraz: where tablename = 'osoby' or tablename = 'pracownicy' 3.6. Wywietli nazwy i typy atrybutów tabeli Osoby: select pa.attname, pt.typname from pg_class pc, pg_attribute pa, pg_type pt where pc.relname='osoby' and pc.oid =pa.attrelid and pt.oid = pa.atttypid; 3.7. Wywietli wartoci niejawnej kolumny tableoid tabeli Pracownicy. 3.8. Wywietli wartoci niejawnej kolumny tableoid tabeli Osoby. Co daje si zauway? 3.9. Potwierdzi swoje wczeniejsze obserwacje wywietlajc wszystkie dane wpisane do tabeli Osoby: select * from Osoby; 3.10. Do poprzednio zadanego zapytania doda fraz only: select * from only Osoby; 3.11. Spróbowa usun rekord dotyczcy Marii Bialek z tabeli Pracownicy. delete from Pracownicy where imie = Maria ; 3.12. Sprawdzi czy rekord został usunity zarówno z tabeli Pracownicy, jak i z tabeli Osoby. 3.13. Wpisa 2 rekordy do tabeli Pracownicy: Witold Wrembel 88888888888 02-02-1977 2 10 1970 Kamila Bialek 99999999999 12-12-1983 3 20 1971 3.14. Ponownie wykona polecenie 3.7 oraz 3.8. Co daje si zauway? 3.15. Stworzy now tabel, w której bd pamitane informacje o premiach poszczególnych pracowników, przy czym atrybut premia_kwartalna bdzie reprezentowany jako czteroelementowa tablica, a kolejne elementy tej tablicy bd liczbami całkowitymi; wskanikiem bdzie numer kwartału: create table premie (nr_prac integer, premia_kwartalna integer[]); 3.16. Wpisa nastpujce dane do nowoutworzonej tabeli: insert into premie values (1, '{100,150,200,250}'); 3.17. Wywietli wpisane do tablicy dane, wykonujc zapytania typu: Select * from premie; select premia_kwartalna[1] from premie; 3.18. Stworzy tabel zawierajc informacje o ksikach poyczanych przez pracowników w zakładowej bibliotece: create table wypozyczenia (nr_prac integer, autor_tytul text[][]); 3.19. Do utworzonej tabeli wpisa 2 rekordy (dotyczce pracowników o numerach 1, i 2): insert into wypozyczenia values (1, '{{ Tolkien, Hobbit }, { Dickens, Klub Pickwicka }, { Stone, Pasja zycia }} ); insert into wypozyczenia values (2, '{{"Pascal", "Przewodnik"}, {"Archer", "Co do grosza"}}'); 3.20. Wywietli wartoci wpisane w tablicach; zaobserwowa rónice i podobiestwa w otrzymywanych

wynikach: select * from wypoyczenia; select nr_prac, autor_tytul[1][1] from wypozyczenia; select nr_prac, autor_tytul[1:3][1] from wypozyczenia; select nr_prac, autor_tytul[1:3][1:3] from wypozyczenia; select nr_prac, autor_tytul[1:3][2] from wypozyczenia; select nr_prac, autor_tytul[2][2] from wypozyczenia; select nr_prac, autor_tytul[2][1] from wypozyczenia; 3.21. Napisa funkcj w jzyku SQL, wywietlajc informacje o nazwisku pracownika, którego numer podany jest parametrem. Ogólna posta funkcji jest nastpujca: CREATE FUNCTION nazwafunkcji (typparametru1, typparametru2, ) RETURNS typwynikowy AS ciałofunkcji CREATE FUNCTION dane (integer) RETURNS text AS select nazwisko from Pracownicy where nr_prac = $1 3.22. Przetestowa działanie funkcji wpisujc polecenie: select dane(1) as nazwisko; 3.23. Napisa funkcj wywietlajc wszystkie dane osobowe pracownika (imi, nazwisko, PESEL), którego numer podany jest parametrem. W tym celu zdefiniowa najpierw typ, a dopiero w drugiej kolejnoci stosown procedur: CREATE TYPE complex AS (i text, n text, p text); CREATE FUNCTION dane2 (integer) RETURNS complex AS select imie, nazwisko, PESEL from Pracownicy where nr_prac = $1 select dane2(2); 3.24. Napisa funkcj wywietlajc wszystkie dane osobowe (imi, nazwisko, PESEL) wszystkich pracowników: CREATE FUNCTION dane3 () RETURNS setof complex AS select imie, nazwisko, PESEL from Pracownicy select dane3(); 3.25. Napisa funkcj wywietlajc (tylko) tytuły ksiek poyczonych przez pracownika o podanym parametrem funkcji numerze. Podj prób takiego wskazania współrzdnych atrybutu tablicowego, aby w wyniku wykonania polecenia SELECT faktycznie pojawiły si tylko tytuły ksiek a nie np. zestaw autortytuł (Podpowied: w obu nawiasach kwadratowych powinny si znale zakresy pokazywanych danych rozdzielone symbolem :). 3.26. Napisa funkcj w proceduralnym jzyku Postgresa plpgsql, łczc w jedno słowo dwa cigi tekstowe podane parametrem: CREATE OR REPLACE FUNCTION concat (text, text) RETURNS text AS /*to jest delimiter pocztkowy moe by dowolnym znakiem lub cigiem znaków*/ /*tu mog si pojawi deklaracje poprzedzone słowem DECLARE */ RETURN $1 $2;

/*to jest delimiter kocowy*/ LANGUAGE 'plpgsql'; W przypadku pojawienia si komunikatu o braku jzyka plpgsql, polecenie tworzenia funkcji poprzedzi wykonaniem polecenia: CREATE LANGUAGE plpgsql; 3.27. Przetestowa działanie funkcji np.: select concat('po','danie'); 3.28. Napisa funkcj w proceduralnym jzyku Postgresa plpgsql, zwracajc warto pensji pracowników podwyszon o 25% i przetestowa jej działanie. CREATE OR REPLACE FUNCTION extra_money (integer) RETURNS real AS DECLARE zm real; select 1.25 * pensja into zm from pracownicy where nr_prac = 1; RETURN zm; LANGUAGE 'plpgsql'; 3.29. W celu zapamitania numerów telefonów poszczególnych osób, do tabeli Osoby doda 2 kolumny i dla 2 wybranych osób wpisa do nich przykładowe dane: alter table Osoby add column prefix_tel text; alter table Osoby add column tel text; update Osoby set prefix_tel = '0-16'where imie = 'Witold'; update Osoby set tel = '7654321'where imie = 'Witold'; update Osoby set prefix_tel = '0'where imie = 'Kamila'; update Osoby set tel = '500010203'where imie = 'Kamila'; 3.30. Napisa funkcj łczc dla pracowników wartoci wpisane w kolumnie prefix_tel z wartociami kolumny tel: CREATE OR REPLACE FUNCTION merge_fields(t_row pracownicy) RETURNS text AS RETURN t_row.imie '' t_row.nazwisko '' t_row.prefix_tel t_row.tel; LANGUAGE plpgsql; SELECT merge_fields(t.*) FROM pracownicy t 3.31. Napisa funkcj łczc wartoci wpisane w kolumnie prefix_tel z wartociami kolumny tel: CREATE OR REPLACE FUNCTION merge_fields(t_row osoby) RETURNS text AS RETURN t_row.prefix_tel t_row.tel; LANGUAGE plpgsql; SELECT merge_fields(t.*) FROM osoby t ; 3.32. Napisa reguł uniemoliwiajc zmian wartoci atrybutu pensja dla aktualizowanego pracownika. Reguła ma ogóln posta:

CREATE RULE nazwareguły AS ON zdarzenie TO obiekt [WHERE warunek] DO [ALSO INSTEAD] [akcja (akcje) NOTHING]; create rule regula1 as on update to Pracownicy where NEW.pensja <> OLD.pensja do instead nothing; 3.33. Sprawdzi poprawno działania reguły, a nastpnie usun reguł: select * from pracownicy; update pracownicy set nr_zesp = 30 where nr_zesp = 20; select * from pracownicy; update pracownicy set pensja = 2000 where imie = 'Witold'; select * from pracownicy; 3.34. Napisa reguł, która nie dopuci na dopisanie nowego pracownika o numerze mniejszym bd równym zeru. 3.35. Za pomoc reguł utworzy modyfikowalne widoki (perspektywy), które normalnie nie s obsługiwane przez Postgresql. W tym celu utworzy perspektyw tabeli Osoby: CREATE VIEW osob_view AS SELECT imie, nazwisko, PESEL FROM osoby WHERE imie= ; CREATE RULE reg2 AS ON INSERT TO osob_view DO INSTEAD INSERT INTO osoby VALUES (NEW.imie,NEW.nazwisko, NEW.PESEL); 3.36. Trigger definiuje si nastpujc składni: CREATE TRIGGER nazwa BEFORE AFTER /*czy trigger ma by wykonany przed czy po zdarzeniu*/ INSERT UPDATE DELETE /*których zdarze trigger dotyczy, mona łczy kilka przez OR)*/ ON tabela FOR EACH ROW STATEMENT /*czy trigger ma by wywołany raz na rekord, czy raz na instrukcj*/ EXECUTE PROCEDURE procedura (parametry); /*co ma by wywołane jako obsługa triggera*/ Trigger usuwa si nastpujc składni: DROP TRIGGER nazwa ON tabela; 3.37. W celu pamitania czasu modyfikacji danych w tabeli Premie, doda do niej 1 kolumn: ALTER TABLE Premie ADD COLUMN last_updated timestamptz; 3.38. Napisa funkcj CREATE OR REPLACE FUNCTION upd() RETURNS trigger AS NEW.last_updated = now(); RETURN NEW; LANGUAGE plpgsql; 3.39. Utworzy wyzwalacz, który dla kadego nastpnego wstawienia nowego wiersza (lub modyfikacji istniejcego) w tabeli Premie spowoduje umieszczenie aktualnego znacznika czasu w polu last_updated biecego rekordu tabeli: CREATE TRIGGER last_upd BEFORE insert OR update ON Premie

FOR EACH ROW EXECUTE PROCEDURE upd(); 3.40. Przetestowa działanie napisanego wyzwalacza: select * from Premie; insert into Premie values (2, '{300,150,100,150}'); select * from Premie; 3.41. Utworzy tabel TOWARY(id,nazwa,cena_netto) i wpisa nastpujce dane: 1 kabel 50 2 laptop 940 3 monitor 600 3.42. Napisa funkcj podatek_vat() oraz wywietli towary tzn. (id, nazwa, cena_netto, podatek_vat(cena_netto), cena_netto + podatek_vat(cena) as cena_brutto). 3.43. Załoy tabel TOWARY2(id,nazwa,cena,cena_vat,cena_brutto). Napisa wyzwalacz, który przy wprowadzaniu oraz uaktualnianiu krotek (id,nazwa,cena_netto), obliczy odpowiednio cen_vat oraz cen_brutto. 3.44. Po zatwierdzeniu wykonania zada przez prowadzcego, usun baz, utworzon na pocztku laboratorium.