Bazy danych - Wkuwanko.pl
Transkrypt
Bazy danych - Wkuwanko.pl
Plan wykładu • Sekwencje • Wyzwalacze Bazy danych • • • • Wykład 9: Programowanie aplikacji baz danych po stronie serwera Bloki anonimowe Funkcje Procedury Pakiety Małgorzata Kr towska Katedra Oprogramowania e-mail: [email protected] Bazy danych (studia dzienne) Perspektywy cd 2 Zł czenia tabel CREATE [ OR REPLACE] VIEW nazwa_perspektywy [kolumna1, kolumna2, ...] AS zapytanie WITH READ ONLY; • select * from emp, dept where emp.deptno=dept.deptno; – select * from emp NATURAL JOIN dept; – select * from emp JOIN dept USING (deptno); • ka dy uprawniony u ytkownik mo e tylko ogl da dane o pracownikach bez mo liwo ci wstawiania, modyfikowania czy usuwania wierszy • Select prac.ename, kier.ename as mgr from emp prac, emp kier where prac.mgr=kier.empno; – Select prac.ename, kier.ename as mgr » from emp prac JOIN emp kier ON prac.mgr=kier.empno; Bazy danych (studia dzienne) 3 Bazy danych (studia dzienne) 4 Zł czenia zewn trzne • • Powtórzenie: Zł czenie zewn trzne rozszerza rezultat prostego zł czenia o te wiersze z jednej tabel, dla których w trakcie zł czania nie znaleziono odpowiadaj cych im wierszy w drugiej tabeli. • SQL> select ename, dept.deptno, dname from emp, dept where emp.deptno (+) =dept.deptno and dept.deptno in (30,40); ENAME DEPTNO DNAME • Zł czenia zewn trzne cd • Zł czenie zewn trzne mo na realizowa równie w oparciu o struktur LEFT JOIN, RIGHT JOIN, FULL JOIN • Przykład. Wypisz wszystkich pracowników podaj c dla ka dgo z nich nazw działu, w którym pracuje. Select empno, ename, dname from emp left join dept on emp.deptno=dept.deptno; ---------- ---------- -------------ALLEN 30 SALES BLAKE 30 SALES MARTIN 30 SALES JAMES 30 SALES TURNER 30 SALES WARD 30 SALES 40 OPERATIONS Bazy danych (studia dzienne) wypisuje wszystkich pracowników, gdy pracownik nie ma przypisanego działu w miejsce dname pojawia si warto 5 Zł czenia zewn trzne cd Bazy danych (studia dzienne) NULL 6 Struktura bloku w PL/SQL • Przykład Wypisz wszystkie działy, dla ka dego z nich podaj c sumaryczne zarobki zatrudnionych w nim pracowwników. [DECLARE deklaracje] Select dept.deptno, dname, sum(sal) from emp right join dept on emp.deptno=dept.deptno group by dept.deptno, dname; – gdy w dziale nie ma adnego pracownika w pozycji Sum (sal) b dzie warto NULL BEGIN • Przykład [EXCEPTION obsługa wyj tków] Select empno, ename, dname from emp full join dept on emp.deptno=dept.deptno; – poł czenie LEFT JOIN i RIGHT JOIN - zostan wypisane departamenty bez pracowników i pracownicy bez departamentów. Bazy danych (studia dzienne) END; 7 Bazy danych (studia dzienne) 8 Wykonanie bloku w PL/SQL [DECLARE deklaracje] BEGIN [EXCEPTION obsługa wyj tków] Struktura bloku w PL/SQL START nazwa_pliku @nazwa_pliku zmienne, stałe, kursory, wyj tki zdefiniowane przez u ytkownika Uruchomienie bloku załadowanego do bufora instrukcje j zyka SQL instrukcje steruj ce PL/SQL END; / RUN / Bazy danych (studia dzienne) działania, które maj by podj te w razie wyst pienia bł dów 9 Bazy danych (studia dzienne) Zmienne i stałe 10 Typy danych ZMIENNA: • zmienna%TYPE • tabela.kolumna%TYPE • tabela%ROWTYPE identyfikator typ_danych [NOT NULL] [:=wart_pocz | DEFAULT wart_pocz]; STAŁA: identyfikator CONSTANT typ_danych [:=wart_pocz | DEFAULT wart_pocz]; Bazy danych (studia dzienne) 11 Bazy danych (studia dzienne) 12 Instrukcja warunkowa IF warunek THEN instrukcja-1; END IF; Instrukcja iteracyjna LOOP IF warunek THEN instrukcja-1; ELSE instrukcja-2; END IF; LOOP WHILE warunek LOOP instrukcje; instrukcje; EXIT [WHEN warunek]; END LOOP; END LOOP; IF warunek-1 THEN instrukcja-1; ELSIF warunek-2 THEN instrukcja-2; ELSE instrukcja-3; END IF; Bazy danych (studia dzienne) FOR licznik IN [REVERSE] min..max LOOP instrukcje; END LOOP; 13 Bazy danych (studia dzienne) 14 Obsługa wyj tków Przetwarzanie wyników zapyta SELECT lista INTO nazwa_zmiennej | nazwa_rekordu FROM tabela; • Wyst pienie bł du systemu ORACLE – wyj tki predefiniowane – wyj tki nie-predefiniowane • Jawne wywołanie sytuacji wyj tkowej przez u ytkownika przez instrukcj RAISE Bazy danych (studia dzienne) 15 Bazy danych (studia dzienne) 16 Sekwencje Sekwencje • Obiekty bazy danych u ywane do generowania unikatowych warto ci (zwykle na potrzeby kluczy głównych) • Dost p do kolejnych warto ci umo liwiaj pseudokolumny CREATE SEQUENCE nazwa_sekwencji [ INCREMENT BY warto | START WITH warto | {MAXVALUE warto | NOMAXVALUE} | {MINVALUE warto | NOMINVALUE } | {CYCLE | NOCYCLE } ] – NEXTVAL (zwraca warto zwi kszon w kolejnym kroku) – CURVAL (zwraca bie ac warto ) Bazy danych (studia dzienne) 17 Bazy danych (studia dzienne) Sekwencje Wyzwalacze Procedury składowane w bazie danych, automatycznie uruchamiane przez system przy wyst pieniu okre lonego zdarzenia w bazie danych ALTER SEQUENCE nazwa_sekwencji U ycie: tworzenie niestandardowych wi zów integralno ci, zło onych funkcji monitoruj cych działania u ytkowników, ... [ INCREMENT BY warto | {MAXVALUE warto | NOMAXVALUE} | {MINVALUE warto | NOMINVALUE } | {CYCLE | NOCYCLE } ] Bazy danych (studia dzienne) 18 19 Bazy danych (studia dzienne) 20 Tworzenie wyzwalaczy Wyzwalacze (liczba wykonanych akcji) CREATE OR REPLACE TRIGGER nazwa_wyzwalacza { BEFORE | AFTER | INSTEAD OF } { DELETE | INSERT | UPDATE [ OF kolumna, [, kolumna ] … ] } [ OR { DELETE | INSERT | UPDATE [ OF kolumna, [, kolumna ] … ] } ] ON tabela [ FOR EACH ROW [ WHEN (warunek) ] ] blok pl/sql • Wyzwalacze wierszowe: akcja wykonywana jest tyle razy, ile jest wierszy, których dotyczy polecenie aktywuj ce wyzwalacz • Wyzwalacze poleceniowe: akcja wykonywana jest tylko jeden raz, niezale nie od ilo ci wierszy, których dotyczy polecenie aktywuj ce wyzwalacz Bazy danych (studia dzienne) 21 Rodzaje wyzwalaczy (czas wykonania) Bazy danych (studia dzienne) 22 Stare i nowe warto ci wierszy • Wyzwalacze przeprowadzaj ce okre lon akcj przed wykonaniem polecenia, które aktywizuje wyzwalacz • Wyzwalacze przeprowadzaj ce akcj po wykonaniu polecenia, które aktywizuje wyzwalacz INSERT new UPDATE new, old DELETE old :identyfikator.kolumna Bazy danych (studia dzienne) 23 Bazy danych (studia dzienne) 24 Wł czanie i wył czanie wyzwalaczy Modyfikowanie warto ci ALTER TRIGGER nazwa_wyzwalacza { ENABLE | DISABLE} BEFORE Mo na zmienia warto ci “new” AFTER Nie mo na zmienia warto ci “new” Bazy danych (studia dzienne) 25 ALTER TRIGGER nazwa_wyzw ENABLE; ALTER TRIGGER nazwa_wyzw DISABLE; Bazy danych (studia dzienne) Podprogramy 26 Składniki podprogramu Nagłówek podprogramu • Procedury do przeprowadzenia akcji • Funkcje do obliczania warto ci • Pakiety do zbierania logicznie powi zanych procedur i funkcji [deklaracje] BEGIN [EXCEPTION wyj tków] END; obsługa Bazy danych (studia dzienne) 27 Bazy danych (studia dzienne) 28 Podprogramy Podprogramy [CREATE OR REPLACE] FUNCTION nazwa_funkcji [(parametr [, parametr … ] )] RETURN nazwa_typu IS [deklaracje] BEGIN [CREATE OR REPLACE] PROCEDURE nazwa_procedury [ (parametr [, parametr … ] )] IS [deklaracje] BEGIN [EXCEPTIONS obsługa wyj tków] [EXCEPTIONS obsługa wyj tków] END [nazwa_procedury]; END [nazwa_funkcji]; Bazy danych (studia dzienne) 29 30 Wywoływanie procedur/funkcji Tryby parametrów podprogramów rodowisko Bazy danych (studia dzienne) Argument IN Argument OUT Argument IN OUT EXECUTE nazwa_procedury[(parametry)] [deklaracje] EXECUTE zmienna:= nazwa_funkcji[(parametry)] BEGIN [EXCEPTION obsługa wyj tków] END; Bazy danych (studia dzienne) 31 Bazy danych (studia dzienne) 32 Wywoływanie procedur/funkcji - przykład Specyfikacja pakietu CREATE [OR REPLACE] PACKAGE nazwa_pakietu AS deklaracje publiczne specyfikacje podprogramów END; EXECUTE mod_cene(1, 5); VARIABLE g_vat NUMBER EXECUTE :g_vat := wyznacz_VAT(1); PRINT g_vat Bazy danych (studia dzienne) 33 Tworzenie ciała pakietu CREATE [ OR REPLACE ] PACKAGE BODY nazwa_pakietu AS deklaracje prywatne definicje podprogramów [ BEGIN instrukcje inicjalizuj ce pakietu] END; Bazy danych (studia dzienne) 35 Bazy danych (studia dzienne) 34