Wykład: ZSBDwyk01.ppt ............................................................................................. 3 1.1.Kim jest administrator bazy danych? .................................................................... 3 1.2. Jakie znasz typy administratorów? ...................................................................... 3 1.3. Podstawowe obowiązki administratora. ................................................................ 3 1.4. Fizyczne składniki bazy danych Oracle ................................................................. 3 1.5. Logiczne obiekty bazy danych Oracle ................................................................... 3 1.6. Wbudowaniu użytkownicy bazy Oracle ................................................................. 4 1.7. Co to jest przestrzeń tabel? ................................................................................ 4 1.8. Jakie znasz podstawowe wbudowane przestrzenie tabel Oracle ............................... 4 1.9. Działanie zakresów tabel .................................................................................... 4 1.10. Podaj składnię lub przykładowe polecenie definiujące przestrzeń tabel ................... 4 1.11. Podaj przykładowe parametry używane do definiowania przestrzeni tabel ............... 4 1.12. Podaj składnię lub przykładowy polecenie definiujące przestrzeń tabel ................... 5 1.13. Czym jest obszar SGA(System Global Area) ........................................................ 5 1.14. Podaj składnię lub przykładowe polecenie tworzące użytkownika, podaj parametry które mogą być użyte przy tworzeniu ......................................................................... 5 1.15. Czym jest „Rola”, do czego służy oraz co powoduje dodanie lub usunięcie roli ......... 5 1.16. Podaj składnię lub przykładowe polecenie tworzące „rolę”, podaj parametry które mogą być użyte przy tworzeniu ................................................................................. 5 1.17. Podaj składnię lub przykładowe polecenie nadające uprawnienia roli, nadające uprawnienia do obiektu oraz nadawanie uprawnień systemowych .................................. 6 1.18. Podaj składnię lub przykładowe polecenie odbierające uprawnienia użytkownikowi, nadające uprawnienia do obiektu ............................................................................... 6 1.19. Podaj przykłady uprawnień systemowych ........................................................... 6 1.20. Podaj przykłady obiektów do których mogą być nadane uprawnienia oraz przykładowe przywileje (w zależności od obiektu) ........................................................ 6 1.21. Czym jest profil i jakie są jego ustawienia. ......................................................... 6 1.22. Czym są dynamiczne perspektywy ciągów .......................................................... 7 1.23. Czym jest Listener i jakie są jego ustawienia? ..................................................... 7 Wykład: ZSBDwyk02.ppt ............................................................................................. 8 2.1. Jakie znasz główne komendy języka DML? ............................................................ 8 2.2. Czym są dane wycofania i jakie są ich cele? .......................................................... 8 2.3. Czym jest audyt bazy danych i jakie są jego rodzaje? ............................................ 8 2.4. Wymień dwie opcje automatycznego odzyskiwania danych i kiedy się je stosuje? ...... 8 2.5. Jakie znasz strategie, typy oraz sposoby back-upów .............................................. 8 Wykład: ZSBDwyk03.ppt ........................................................................................... 10 3.1. PL/SQL - co to jest? ......................................................................................... 10 3.2. Typy bloków. Opisać strukturę bloku anonimowego i podać przykład ..................... 10 3.3. %TYPE - do czego służy, co nam daje? .............................................................. 11 3.4. Widoczność zmiennych. Nadawanie etykiet blokom zewnętrznym .......................... 11 3.5. Opisz zasady stosowania polecenia SELECT w PL/SQL .......................................... 11 3.6. Wymień rodzaje instrukcji warunkowych i podaj przykłady ................................... 11 3.6. Wymień i opisz rodzaje pętli i sposoby kontrolowania ich wykonywania. Podaj przykłady .............................................................................................................. 12 3.7. Czym są rekordy? Definiowanie rekordu przy użyciu %ROWTYPE. Przykłady ........... 13 3.8. Tabele INDEX BY i związane z nimi funkcje. Przykłady ......................................... 14 3.9. Po co stosuje się kursory? Używanie kursorów z poleceniem FETCH i FOR. Przykłady 15 Wykład: ZSBDwyk04.ppt ........................................................................................... 18 4.1. Czym są wyjątki? Kontrola wyjątków. Przykłady .................................................. 18 4.2. Różnice między nazwanymi a nienazwanymi bloki ............................................... 19 4.3. Porównanie procedur i funkcji ........................................................................... 19 4.3. Opisać sposób deklarowania procedur i sposoby ich wywoływania. Przykłady .......... 19 4.4. Opisać sposób deklarowania funkcji i sposób ich wywoływani. Przykłady ................ 20 Wykład: ZSBDwyk05.ppt ........................................................................................... 22 5.1. Czym są pakiety. Składowe pakietu. .................................................................. 22 5.2. Tworzenie pakietów - składnia. Przykład ............................................................ 22 5.3. Wymienić sposoby wywoływania elementów pakietu ............................................ 23 5.4. Opisać przeciążanie podprogramów. Przykład ..................................................... 23 5.5. Czym są wyzwalacze? ...................................................................................... 23 5.6. Wyzwalacze DML ............................................................................................. 24 5.7. Opisać budowę wyzwalacza. Podać przykład ....................................................... 24 5.8. W jakich sytuacjach wyzwalacz zostanie uruchomiony raz a kiedy wiele razy .......... 24 5.9. Podać przykład wyzwalacza wierszowego ........................................................... 24 Wykład: ZSBDwyk06.ppt ........................................................................................... 26 6.1. Podaj przykładowe zastosowanie Obiektowych baz danych i czym się te dziedziny charakteryzują? ..................................................................................................... 26 6.2. Jakie założenia modelu obiektowego zostały wykorzystane w OBD? ....................... 26 6.3. Jakie założenia baz danych zostały wykorzystane w OBD? .................................... 26 6.4. Powody stosowania OBD .................................................................................. 26 6.5. Podaj cztery składniki standardu ODMG 3.0 ........................................................ 26 6.6. Opisz model ODMG 3.0 .................................................................................... 26 6.7. Scharakteryzuj język ODL ................................................................................ 27 6.8. Podaj składnię lub przykładowe polecenie tworzące klasę w OBD ........................... 27 6.9. Podaj składnię lub przykładowe polecenie tworzące atrybuty klas w OBD ............... 27 6.10. Podaj składnię lub przykładowe polecenie tworzące relacje klas w OBD ................ 27 6.11. Podaj składnię lub przykładowe polecenie tworzące atrybuty klas w OBD .............. 27 6.12. Scharakteryzuj język QDL. .............................................................................. 28 6.13. Zachowanie trwałości danych w OBD ............................................................... 28 6.14. Zachowanie trwałości danych w OBD ............................................................... 28 Wykład: ZSBDwyk07.ppt ........................................................................................... 29 7.1. Jakie elementy dodano do RDBMS w obiektowo relacyjnych bazach danych? .......... 29 7.2. Podać składnie definiowania typu obiektów. Przykład ........................................... 29 7.3. Podać przykład definicji obiektu z metodami ....................................................... 29 7.4. Czym są i do czego służą konstruktory? ............................................................. 29 7.5. Podać przykład dziedziczenia ............................................................................ 30 7.6. Czym są typy i metody abstrakcyjne.................................................................. 30 7.7. Podać przykład nadpisywania metod .................................................................. 30 7.8. Opisać operowanie na tabelach obiektów ............................................................ 31 7.9. Czym są tabele heterogeniczne ......................................................................... 31 7.10. Czym jest typ REF ......................................................................................... 31 7.11. Podać przykład użycia REF .............................................................................. 31 7.12 Podać przykład zawierający związki dwustronne ................................................. 31 7.13. Omówić tworzenie zapytań ............................................................................. 32 7.14. Omówić modyfikowanie i usuwanie typów ......................................................... 32 Wykład: ZSBDwyk01.ppt 1.1.Kim jest administrator bazy danych? Administrator – osoba odpowiedzialna za środowiskowy aspekt bazy danych 1.2. Jakie znasz typy administratorów? Systemowi i operacyjni – monitorują wszystkie egzemplarze bazy danych oraz serwery (dodają użytkowników, schematy, przestrzenie tabel, itd.) Architektury – zapewniają optymalną konstrukcję bazy danych Danych – zapewniają integralność danych oraz uporządkowanie danych 1.3. Podstawowe obowiązki administratora. Instalacja i aktualizacja oprogramowania np. sprawdzanie czy najnowsza wersja bazy danych jest zgodna z działającymi aplikacjami, sprawdzanie prawidłowego funkcjonowania nowego oprogramowania, testowanie nowego oprogramowania w bazach danych i aplikacjach, pilnowanie licencji. Czynności związane z bazami danych, np. dostosowanie miejsca na dysku do wymagań, tworzenie i okresowe testowanie planów archiwizowania, odtwarzania bazy danych, monitorowanie wydajności bazy danych, monitorowanie fragmentacji tabel. Zagadnienia systemowe, np. weryfikacja poprawności procesu archiwizacji, czynności porządkowe, współpraca z administratorem systemu, koordynowanie aktualizacji oprogramowania systemowego. Zagadnienia bezpieczeństwa, np. zarządzanie kontami i hasłami użytkowników, przydzielanie przywilejów (zarządzanie rolami), zarządzanie procedurami kontrolnymi (dostęp do obiektów) 1.4. Fizyczne składniki bazy danych Oracle Pliki danych (dbf) – rzeczywiste dane z bazy Pliki parametrów (ora) – parametry instalacyjne Pliki sterujące (ctl) – odwzorowanie plików fizycznych na logiczne Pliki dzienników powtórzeń (rdo) – odnoszą się do wycofywania transakcji Dzienniki alarmów i śledzenia – informacje o „kondycji” bazy danych (zapisywane zdarzenia, błędy systemowe) Pliki kopii zapasowych 1.5. Logiczne obiekty bazy danych Oracle Przestrzenie tabel – zawiera tabele, ułatwia nadawanie przywilejów Tabele Indeksy – przyśpieszają dostęp do bazy Wyzwalacze – uruchomiane w wyniku jakiegoś zdarzenia Perspektywy – wybór odpowiednich informacji Migawki – uchwycenie danych w określonym momencie Segmenty wycofania – zawierają poprzednie stany bazy danych Segmenty tymczasowe – gdy istnieje konieczność np. sortowania dużych tabel (order by, group by, etc) Role – zbiór przywilejów dostosowanych dla grupy użytkowników (podstawowe RESOURCE, CONNECT) Pakiety, procedury i funkcje Sekwencje –generatory unikatowych liczb używane do jednoznacznej identyfikacji wierszy tabeli Przywileje 1.6. Wbudowaniu użytkownicy bazy Oracle SYS – największe uprawnienia, właściciel wszystkich obiektów wewnętrznych (powinien być jedynym użytkownikiem mający prawa do przestrzeni tabel SYSTEM) SYSTEM – podstawowe konto, z niego tworzonych jest większość obiektów (przestrzeń tabel TOOLS) HR – użytkownik testowy z podstawowymi uprawnieniami 1.7. Co to jest przestrzeń tabel? 1.8. Jakie znasz podstawowe wbudowane przestrzenie tabel Oracle SYSTEM – zawiera słownik bazy danych oraz wszystkie składowane jednostki PL/SQL SYSAUX – elementy opcjonalne EXAMPLE – zawiera przykładowe elementy bazy danych USERS – miejsce na obiekty użytkowników TEMP – przestrzeń elementów tymczasowych UNDO – przestrzeń tabel wycofywania 1.9. Działanie zakresów tabel Pctfree – ile wolnego miejsca ma zostać na aktualizacje w zakresie Pctused – procent zajętości poniżej którego można ponownie dodać wiersze do bloku Wiersze dodawane do zakresu do momentu osiągnięcia zajętości 100% - pctfree, następnie przejście do kolejnego bloku Po usunięciu wierszy – do danego bloku mogą być dodane nowe gdy zajętość osiągnie poniżej pctused 1.10. Podaj składnię lub przykładowe polecenie definiujące przestrzeń tabel CREATE TABLESPACE nazwa datafile ‘ścieżka do pliku’ + parametry Create tablespace MYTAB datafile ‘c:\app\oralcle11g\oradata\orcl\mytab01.dbf’ size 2M; SELECT * FROM DBA_TABLESPACES; 1.11. Podaj przykładowe parametry używane do definiowania przestrzeni tabel SIZE – obszar przydzielony plikowi REUSE – gdy chcemy użyć pliku który już istnieje AUTOEXTEND – możliwość automatycznego zwiększania rozmiaru pliku: gdy włączone na ON dodatkowe parametry: NEXT – o ile ma się zwiększyć, MAXSIZE: maksymalny rozmiar LOGGING/NOLOGGING – czy prowadzone dzienniki powtórzeń DEFAULT STORAGE – ilość miejsca przydzielana obiektowi jeśli nie została wcześniej określona ONLINE/OFFLINE – początkowy stan przestrzeni PERMANENT/TEMPORARY – czy zawiera dane, czy segmenty tymczasowe 1.12. Podaj składnię lub przykładowy polecenie definiujące przestrzeń tabel alter tablespace MYTAB offline; drop tablespace MYTAB; 1.13. Czym jest obszar SGA(System Global Area) SGA - Obszar pamięci z bezpośrednim dostępem użytkownika (np. ostatnio przetwarzane dane, ładowane skrypty) 1.14. Podaj składnię lub przykładowe polecenie tworzące użytkownika, podaj parametry które mogą być użyte przy tworzeniu CREATE USER nazwa identified by hasło [parametry] Możliwe parametry: Externally – identyfikacja za pomocą SO Default tablespace – miejsce gdzie będą tworzone obiekty bazy Temporary tablespace – do operacji sortowania Quota ilość miejsca on tablespace – ilość miejsca dostępnego dla danego użytkownika w jakiejś przestrzeni tabel Profile – nazwa profilu użytkownika default Role – rola domyślna (all, all roles except, none) password expire – termin wygaśnięcia hasła Account locked/unlocked – czy konto powinno być dostępne 1.15. Czym jest „Rola”, do czego służy oraz co powoduje dodanie lub usunięcie roli Rola zbiór przywilejów – przydzielanych dowolnej liczbie użytkowników, ułatwia sposób zarządzania grupami użytkowników, jej dodanie/usunięcie powoduje to samo dla użytkowników posiadających tą rolę 1.16. Podaj składnię lub przykładowe polecenie tworzące „rolę”, podaj parametry które mogą być użyte przy tworzeniu CREATE ROLE nazwaRoli [parametry]; CREATE ROLE mojaRola identified by nowe_hasło; Możliwe parametry: Not identified – bez hasła (domyślnie) Identified by – użycie roli wymaga hasła Identified Externally 1.17. Podaj składnię lub przykładowe polecenie nadające uprawnienia roli, nadające uprawnienia do obiektu oraz nadawanie uprawnień systemowych Nadawanie uprawnień roli: GRANT nazwa1roli, nazwa2roli TO nazwaUzytkownika1, nazwauz2; GRANT create table TO HR; Nadawanie uprawnień do obiektu: GRANT nazwaUprawnienia ON nazwaObiektu TO nazwaUzytkownika; GRANT select, update, delete on HR.DEPARTMENT TO User WITH GRANT OPTION; Nadawanie uprawnień systemowych GRANT nazwaUprawnienia TO nazwaUzytkownika; GRANT restricted session TO admin; 1.18. Podaj składnię lub przykładowe polecenie odbierające uprawnienia użytkownikowi, nadające uprawnienia do obiektu Odbieranie uprawnień użytkownikowi: REVOKE SysUpraw FROM user; REVOKE create table FROM jeff; Odbieranie uprawnień do obiektu: REVOKE ObjUpraw ON Obiekt FROM user; REVOKE select, delete ON employees FROM wazny; 1.19. Podaj przykłady uprawnień systemowych STARTUP, SHUTDOWN – możliwość uruchamiania i zatrzymywania instancji DROP ANY object – możliwość usuwania podanego typu obiektu również użytkowników CREATE, MANAGE, ALTER, DROP TABLESPACE GRANT ANY OBJECT PRIVILEGE – możliwość nadania przywilejów obiektowych ALTER DATABASE, ALTER SYSTEM – pozwala zmieniać bazę innych 1.20. Podaj przykłady obiektów do których mogą być nadane uprawnienia oraz przykładowe przywileje (w zależności od obiektu) Przykładowe obiekty Tabele, perspektywy, sekwencje, migawki, funkcje, procedury Możliwe przywileje (w zależności od obiektu) SELECT, ALTER, DELETE, INSERT, REFERENCES, UPDATE, EXECUTE 1.21. Czym jest profil i jakie są jego ustawienia. Nakładają limity na użytkownika Użytkownik przypisany jest do jednego profilu Ustawienia profilu: Ustawienia hasła Długość połączenia Długość procesu bezczynności Wykorzystanie Procesora (całość lub na jedną komendę) Liczba sesji tego samego użytkownika 1.22. Czym są dynamiczne perspektywy ciągów Informacje dotyczące: Obecnej sesji Stanu plików Poziom postępu wykonywanych zadań Blokad Statusu Backup-ów Wykorzystania i alokacji pamięci Parametrów systemowe i sesji Wykonywania zapytań SQL 1.23. Czym jest Listener i jakie są jego ustawienia? Bramka dostępu do instancji bazy danych dla użytkowników z zewnątrz Listener może obsługiwać wiele instancji bazy danych i wielu użytkowników Ustawienia Listenera: Host – nazwa lub numer IP Numer portu – standardowo 1521 – można zmienić Protokół – standardowo TCP/IP Nazwa instancji Wykład: ZSBDwyk02.ppt 2.1. Jakie znasz główne komendy języka DML? Główne komendy DML: INSERT UPDATE DELETE MERGE – z dwóch tabel tworzy jedną 2.2. Czym są dane wycofania i jakie są ich cele? Kopia danych przed modyfikacją Dodawane dla każdej transakcji, która zmienia dane Utrzymywanie co najmniej do końca przeprowadzania transakcji Główne cele danych wycofania: Wycofywanie transakcji Odzyskiwanie danych z awarii transakcji Odtworzenie zapytań, tabel, transakcji 2.3. Czym jest audyt bazy danych i jakie są jego rodzaje? Oznacza zbieranie i gromadzenie informacji na temat działań w systemie – może obniżać wydajność systemu Typy audytu: Obligatoryjny (np. logowanie Adminów) Standardowy – wybór opcji i przywilejów które mają być monitorowane (ustawiaony za pomocą AUDIT_TRIAL) Bazujący na wartościach – związany z przekazywanymi wartościami z insert, update, delete; zaimplementowany za pomocą wyzwalaczy Drobnoziarnisty – gromadzi komendy SQL 2.4. Wymień dwie opcje automatycznego odzyskiwania danych i kiedy się je stosuje? Gdy dane podczas zamykania instancji źle zapisane Uruchomiane podczas włączenia bazy danych Dwie możliwe operacje: Rolling forward – dane wracają do stanu przed awarią Rolling back – niezatwierdzone zmiany wracają do stanu przed zmianami 2.5. Jakie znasz strategie, typy oraz sposoby back-upów Strategia backup-u: Cała baza danych Tylko wybrane elementy Typ backup-u: Wszystkie bloki danych Tylko informacje o zmianach od wcześniejszych backup-ów Kumulatywny – wszystkie zmiany od pierwszego backup-u Różnicowy – tylko zmiany od ostatniego backup-u Sposób backupu Online Offline Wykład: ZSBDwyk03.ppt 3.1. PL/SQL - co to jest? rozszerzenie SQL-a do języka proceduralnego; standardowy język Oracle dostępu do danych w relacyjnych bazach; ułatwia wykonywanie powtarzających się operacji jak również operacji opartych o określone warunki. Podstawowe elementy PL/SQL: kod zorganizowany w wykonywalne bloki; zawiera elementy języka proceduralnego: o zmienne, stałe typy danych; o instrukcje warunkowe, pętle; o bloki danych używanie wiele razy – procedury, funkcje, pakiety; o obsługa wyjątków. Zalety PL/SQL: integracja elementów proceduralnych z SQL-em; zwiększona wydajność; możliwość podziału kodu na moduły; integracja z narzędziami Oracle; obsługa wyjątków. 3.2. Typy bloków. Opisać strukturę bloku anonimowego i podać przykład blok anonimowy; procedura; funkcja. Elementy bloku anonimowego: DECLARE - opcjonalny - zawiera deklarację zmiennych; BEGIN - wymagany -zawiera instrukcje SQL i PL/SQL; EXCEPTION - opcjonalny – zawiera obsługę wyjątków; END; - wymagany - kończy blok. Przykład bloku anonimowego: DECLARE imieStudenta VARCHAR(30); BEGIN SELECT imie INTO imieStudenta FROM studenci WHERE nrIndeksu = 054321; DBMS_OUTPUT.PUT_LINE('Imię studenta o numerze indeksu 054321: '|| imieStudenta); EXCEPTION WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('Wystąpił błąd! Zwrócono więcej niż jeden wiersz.'); END; 3.3. %TYPE - do czego służy, co nam daje? pozwala zdefiniować typ zmiennej na podstawie zmiennej już wcześniej zadeklarowanej lub kolumny z tabeli; ułatwia uniknięcia błędu polegającego na złym typie danych (jeżeli zmianie ulegnie typ danych elementu, do którego odnosi się nasza zmienna to i ona zmieni typ). Przykład deklaracji: imieStudenta studenci.imie%TYPE; nrIndeksu NUMBER(5); nrIndeksu2 nrIndeksu%TYPE; 3.4. Widoczność zmiennych. Nadawanie etykiet blokom zewnętrznym gdy zmienne mają tę samą nazwę to widoczna będzie zmienna z bloku wewnętrznego; aby dostać się do zmiennej zewnętrznej należy nadać blokowi zewnętrznemu etykietę (BEGIN <<nazwa_etykiety>> (...) END nazwa_etykiety;) Przykład: BEGIN <<zew>> DECLARE imie VARCHAR(20):='Tomasz'; BEGIN DECLARE imie VARCHAR(20):='Michal'; BEGIN DBMS_OUTPUT.PUT_LINE(zew.imie); /*wyświetli: Tomasz */ END; END; END zew; 3.5. Opisz zasady stosowania polecenia SELECT w PL/SQL zapytanie musi zwrócić dokładnie jeden wiersz; musi zostać użyte słówko INTO, po którym występują zmienne, do których zostanie wczytany rezultat zapytania (liczba i typy zmiennych muszą się zgadzać z liczbą i typami kolumn zwróconymi przez zapytanie). Przykład: DECLARE imieStudenta studenci.imie%TYPE; nazwiskoStudenta studenci.nazwisko%TYPE; BEGIN SELECT imie, nazwisko INTO imieStudenta, nazwiskoStudenta FROM studenci WHERE nrIndeksu = 054321; END; 3.6. Wymień rodzaje instrukcji warunkowych i podaj przykłady if case Przykład 1: DECLARE sprzedaz NUMBER(6); premia NUMBER(3); BEGIN IF sprzedaz > 100 THEN premia:=500; ELSEIF sprzedaz > 80 THEN premia:=350; ELSE premia = 200; END IF; END; Przykład 2: DECLARE ocena NUMBER(1):=5; ocenaSlownie VARCHAR2(20); BEGIN ocenaSlownie := CASE ocena WHEN 5 THEN 'bardzo dobry' WHEN 4 THEN 'dobry' WHEN 3 THEN 'dostateczny' WHEN 2 THEN 'niedostateczny' ELSE 'nie ma takiej oceny' END; DBMS_OUTPUT.PUT_LINE(ocenaSlownie); END; Przykład 3: DECLARE ocena NUMBER(1):=5; ocenaSlownie VARCHAR2(20); BEGIN ocenaSlownie := CASE WHEN ocena=5 THEN 'bardzo dobry' WHEN ocena=4 THEN 'dobry' WHEN ocena=3 THEN 'dostateczny' WHEN ocena IN(2,1,0) THEN 'niedostateczny' ELSE 'nie ma takiej oceny' END; DBMS_OUTPUT.PUT_LINE(ocenaSlownie); END; 3.6. Wymień i opisz rodzaje pętli i sposoby kontrolowania ich wykonywania. Podaj przykłady LOOP - wykonuje się do póki warunek nie jest spełniony; WHILE - wykonuje się do póki warunek jest spełniony; FOR - przejście po określonym zakresie licznika (gdy użyjemy REVERSE przejście nastąpi od górnej granicy do dolnej, licznika nie musimy deklarować). Kontrolowanie wykonywania pętli: CONTINUE - wymusza porzucenie obecnej iteracji w pętli i rozpoczęcie nowej; EXIT - wymusza opuszczenie obecnej pętli i przejście do kolejnej instrukcji. Przykład 1: DECLARE suma NUMBER(4):=1; i NUMBER(3):=1; BEGIN LOOP suma:=2*suma; EXIT WHEN i > 5; i:=i+1; END LOOP; DBMS_OUTPUT.PUT_LINE(suma); END; Przykład 2: DECLARE x NUMBER(4):=20; BEGIN WHILE x>0 LOOP x:=x-1; DBMS_OUTPUT.PUT_LINE(x); END LOOP; END; Przykład 3: DECLARE numer NUMBER(4):=1000; BEGIN FOR i IN REVERSE 1..10 LOOP DBMS_OUTPUT.PUT_LINE(numer+i); END LOOP; END; Przykład 4: DECLARE i NUMBER(4):=0; BEGIN WHILE TRUE LOOP i:=i+1; IF MOD(i,2)=0 THEN CONTINUE; END IF; IF i>=10 THEN EXIT; END IF; DBMS_OUTPUT.PUT_LINE(i); END LOOP; END; 3.7. Czym są rekordy? Definiowanie rekordu przy użyciu %ROWTYPE. Przykłady zawierają dane logicznie ze sobą powiązane np. wiersz bądź część wiersza tabeli; mogą zawierać pola o różnych typach danych; muszą mieć co najmniej jedno pole. %ROWTYPE: przed %ROWTYPE należy dodać nazwę tabeli, do której ma się odwoływać zmienna; odwołuje się do wszystkich kolumn jednej tabeli; nazwy kolumn oraz typy danych w poszczególnych kolumnach przekazane są do zmiennej; gdy zmienia się typ danych lub nazwy w tabeli to automatycznie zmianie ulega zmienna z %ROWTYPE – nie trzeba pilnować typów. Przykład 1: TYPE ocenaStudenta IS RECORD( ocena NUMBER(1), opis oceny.opis%TYPE); Przykład 2: Tabela oceny(id, opis, waga) DECLARE ocena oceny%ROWTYPE; BEGIN SELECT * INTO ocena FROM oceny WHERE id=4; DBMS_OUTPUT.PUT_LINE(ocena.id||' '||ocena.opis||' '||ocena.waga); END; 3.8. Tabele INDEX BY i związane z nimi funkcje. Przykłady składają się z dwóch pól – identyfikatora (liczba lub ciąg znaków) oraz wartości; gromadzą dane o tym samym typie; mają nieograniczoną wielkość tzn. ogranicza je zakres wartości identyfikatora; odpowiadają tabelom z „normalnych” języków programowania. Definiowanie: TYPE nazwa IS TABLE OF typkolumny INDEX BY PLS_INTEGER|BINARY_INTEGER|VARCHAR2; Funkcje: EXISTS – sprawdza czy istnieje dana komórka w tabeli (np. ocena(1).EXISTS zwraca prawdę albo fałsz); COUNT – zwraca liczbę elementów tabeli (np. dbms_output.put_line(imiona.COUNT); ); FIRST, LAST – zwracają pierwszą/ostatnią wartość z tabeli, gdy tabela jest pusta zwracany jest NULL; PRIOR(n), NEXT(n) – zwracają poprzedni/kolejny indeks z tabeli – porównując do n; DELETE – usuwa elementy z tabeli: o bez argumentu – usuwa wszystko; o z argumentem n – usuwa n-ty element; o z argumentami m,n – usuwa wszystkie elementy od m do n. Przykład 1: DECLARE TYPE idOcena IS TABLE OF oceny.id%TYPE INDEX BY PLS_INTEGER; ocena idOcena; BEGIN ocena(1):=3; DBMS_OUTPUT.PUT_LINE(ocena(1)); END; Przykład 2: DECLARE TYPE idOcena IS TABLE OF oceny%ROWTYPE INDEX BY PLS_INTEGER; ocena idOcena; BEGIN FOR i IN 1..7 LOOP SELECT * INTO ocena(i) FROM oceny WHERE id=i; END LOOP; FOR i IN ocena.FIRST..ocena.LAST LOOP DBMS_OUTPUT.PUT_LINE(ocena(i).id||' '||ocena(i).opis||' '||ocena(i).waga); END LOOP; END; 3.9. Po co stosuje się kursory? Używanie kursorów z poleceniem FETCH i FOR. Przykłady definiuje się je do poleceń SELECT, które zwracają wiele wierszy do przetworzenia danych; dane można przetwarzać wiersz po wierszu. Definiowanie: CURSOR nazwa IS zapytanie_SQL_SELECT; Otwieranie kursora: aby była możliwość dostępu do danych w kursorze należy użyć polecenia – OPEN nazwa_kursora; polecenie alokuje dynamicznie pamięć dla danych z otwieranego kursora; sczytywanie są odpowiednie typy i nazwy kolumn dla kursora; wiersze nie są przekazywane do zmiennych kursora – dopiero w momencie uruchomienia polecenia FETCH dane są sczytywane. FETCH: pobiera z kursora jeden wiersz danych i przesuwa się do następnego wiersza; sposób użycia: FETCH nazwaKursora INTO zmienne; o po INTO liczba zmiennych i typy muszą odpowiadać liczbie i typom kolumn pobieranych z kursora; o kolejność występowania zmiennych musi odpowiadać kolejności kolumn zdefiniowanych w kursorze. CLOSE: zamyka dostęp do kursora; zwalnia pamięć zajmowaną przez kursor; sposób użycia: CLOSE nazwaKursora; FOR dla kursora: składnia: FOR zmienna IN nazwakursora LOOP instrukcje; END LOOP; 'zmienna' – rekord sczytujący kolejne wiersze kursora; otwarciem, FETCH i zamknięciem kursora zajmuje się pętla. Atrybuty kursora: %ISOPEN – zwraca prawdę gdy kursor jest otwarty; %NOTFOUND – zwraca prawdę gdy zmienna nie zawiera danych; %FOUND – zwraca prawdę gdy zmienna zawiera dane; %ROWCOUNT – zwraca liczbę wierszy wyciągniętych poprzez kursor do momentu wywołania atrybutu. Kursor – parametry: aby do kursora przekazać jakieś parametry należy użyć następującej składni: CURSOR nazwa(parametr typ, …) IS SELECT …; (...) OPEN nazwa(wartosc parametru); Przykład 1: DECLARE CURSOR kursorek IS SELECT opis, waga FROM oceny; ocena kursorek%ROWTYPE; BEGIN OPEN kursorek; LOOP FETCH kursorek INTO ocena; EXIT WHEN kursorek%NOTFOUND; DBMS_OUTPUT.PUT_LINE(ocena.opis||' '||ocena.waga); END LOOP; DBMS_OUTPUT.PUT_LINE(kursorek%ROWCOUNT); CLOSE kursorek; END; Przykład 2: DECLARE CURSOR kursorek IS SELECT opis, waga FROM oceny; ocena kursorek%ROWTYPE; BEGIN FOR ocena IN kursorek LOOP DBMS_OUTPUT.PUT_LINE(ocena.opis||' '||ocena.waga); END LOOP; END; Przykład 3: DECLARE CURSOR kursorek(idOceny NUMBER) IS SELECT opis, waga FROM oceny WHERE id=idOceny; ocena kursorek%ROWTYPE; BEGIN OPEN kursorek(2); LOOP FETCH kursorek INTO ocena; EXIT WHEN kursorek%NOTFOUND; DBMS_OUTPUT.PUT_LINE(ocena.opis||' '||ocena.waga); END LOOP; CLOSE kursorek; OPEN kursorek(3); LOOP FETCH kursorek INTO ocena; EXIT WHEN kursorek%NOTFOUND; DBMS_OUTPUT.PUT_LINE(ocena.opis||' '||ocena.waga); END LOOP; CLOSE kursorek; END; Wykład: ZSBDwyk04.ppt 4.1. Czym są wyjątki? Kontrola wyjątków. Przykłady wyjątki – błędy pojawiające się podczas uruchomienia bloku; w momencie wystąpienia wyjątku blok kończy działanie – wyjątek pozawala na wykonanie ostatnich działań przed końcem wykonania bloku; dwie opcje wywołania wyjątku: o predefiniowane w Oracle (np. NO_DATA_FOUND) ; o wywoływane przez użytkownika za pomocą RAISE nazwa, gdzie nazwa zdefiniowana jako wyjątek z dodaną obsługą. Schemat tworzenia obsługi wyjątków: BEGIN (…) EXCEPTION WHEN wyjatek1 [OR wyjatek2 …] THEN instrukcje; WHEN wyjatek3 [OR wyjatek4…] THEN instrukcje; WHEN OTHERS THEN instrukcje; END; Przykład 1: DECLARE opis VARCHAR2(20); BEGIN SELECT opis INTO opis FROM oceny WHERE id = 1 OR id = 2; DBMS_OUTPUT.PUT_LINE(opis); EXCEPTION WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('Zwrócono zbyt dużo wierszy. Zmień warunek WHERE.'); END; Przykład 2: DECLARE wyjatek EXCEPTION; BEGIN UPDATE oceny SET opis='Koło z ZSBD' WHERE id = 11; IF SQL%NOTFOUND THEN RAISE wyjatek; END IF; EXCEPTION WHEN wyjatek THEN DBMS_OUTPUT.PUT_LINE('Nie ma oceny o podanym id.'); END; 4.2. Różnice między nazwanymi a nienazwanymi bloki Nienazwane Nazwane Kompilowane za każdym razem Kompilowane raz Brak możliwości zapisania w bazie danych Zapisywane w bazie danych Brak możliwości używania przez inne aplikacje Możliwość korzystania przez inne aplikacje Nie zwracają wartości Funkcje zwracają wartość określonego typu, procedury mogą zwracać 0 lub więcej wartości Nie można przekazywać parametrów do bloku Można przekazywać parametry do bloku 4.3. Porównanie procedur i funkcji Procedury Funkcje Wykonywane jako instrukcje PL/SQL Wywoływane jako część jakiegoś wyrażenia Nie zawierają RETURN w deklaracji Muszą zawierać RETURN wraz z typem danych w deklaracji Może przekazać na zewnątrz wartości parametrów (zastosowanie OUT, IN OUT) Musi zwracać dokładnie jedną wartość Może użyć RETURN Musi posiadać przynajmniej jeden RETURN w kodzie funkcji 4.3. Opisać sposób deklarowania procedur i sposoby ich wywoływania. Przykłady składnia: CREATE [OR REPLACE] PROCEDURE nazwa(parametr [tryb] typ_danych [DEFAULT wartość], …) AS|IS deklaracja zmiennych lokalnych; BEGIN instrukcje; END; o 'tryb' może przyjąć wartości: IN – parametry wejściowe (ustawiane domyślnie); OUT – parametry wyjściowe; IN OUT – parametry działające w obie strony; o DEFAULT – przyjmowana wartość, w przypadku nie podania parametru. Wywoływanie procedury: w bloku PL/SQL - jako nazwa procedury, wraz z parametrami, np. BEGIN nazwaProcedury(wartoscParametru); END; z linii komend - EXECUTE nazwaProcedury(wartośćParametru); Przykład 1: create or replace PROCEDURE DODAJSTUDENTA(album number, imie VARCHAR2, nazwisko VARCHAR2) AS BEGIN INSERT INTO studenci(album, imie, nazwisko) VALUES(album,imie,nazwisko); dbms_output.put_line('Dodano studenta: '||imie||' '||nazwisko||' o numerze indeksu: '||album); END DODAJSTUDENTA; Przykład 2: create or replace PROCEDURE STUDENT(nrAlbumu IN NUMBER DEFAULT 54900) AS imie VARCHAR2(20); nazwisko VARCHAR2(20); BEGIN SELECT imie, nazwisko INTO imie, nazwisko FROM studenci WHERE album=nrAlbumu; DBMS_OUTPUT.PUT_LINE(imie||' '||nazwisko); END STUDENT; Przykład 3: create or replace PROCEDURE dodaj48 (telefon IN OUT varchar2) IS BEGIN telefon := '+48' || telefon; END dodaj48; wywołanie procedury 'dodaj48': DECLARE tel VARCHAR2(20):='997'; BEGIN dodaj48(tel); DBMS_OUTPUT.PUT_LINE(tel); END; 4.4. Opisać sposób deklarowania funkcji i sposób ich wywoływani. Przykłady składnia: CREATE [OR REPLACE] FUNCTION nazwa(parametr typ_danych, …) RETURN typDanych IS zmienneLokalne; BEGIN (…) RETURN wartośćZgodnaZtypDanych; (…) END; Wywoływanie funkcji: linia komend: o EXECUTE DBMS_OUTPUT.PUT_LINE(maksik(20,30)); o VARIABLE wieksza NUMBER; EXECUTE :wieksza :=maksik(100,200); blok anonimowy: DECLARE wieksza NUMBER(4); BEGIN wieksza:=maksik(30,50); END; instrukcja SQL: SELECT job_id, maksik(min_salary, max_salary) FROM jobs; Przykład 1: create or replace FUNCTION maksik(a NUMBER, b NUMBER) RETURN NUMBER IS BEGIN IF a>b THEN RETURN a; ELSE RETURN b; END IF; END maksik; użycie funkcji: BEGIN DBMS_OUTPUT.PUT_LINE(maksik(3,4)); END; Wykład: ZSBDwyk05.ppt 5.1. Czym są pakiety. Składowe pakietu. obiekt logiczny schematu bazy danych grupujący logicznie powiązane elementy PL/SQL – typy, zmienne, podprogramy (procedury, funkcje); pozwala wiele elementów załadować na raz; skład pakietu: o specyfikacja - zawiera deklaracje typów, zmiennych, stałych, kursorów podprogramów, do których można się odwoływać z zewnątrz pakietu (zadeklarowane elementy są publiczne); o zawartość/ciało - zawiera instrukcje dla kursorów i podprogramów zadeklarowanych w specyfikacji oraz może definiować dodatkowe elementy niewidoczne na zewnątrz. 5.2. Tworzenie pakietów - składnia. Przykład CREATE [OR REPLACE] PACKAGE nazwa AS|IS deklaracja typów publicznych; deklaracja zmiennych; specyfikacja podprogramów; END [nazwa]; CREATE [OR REPLACE] PACKAGE BODY nazwa AS|IS odpowiednie deklaracje, tworzenie zawartości podprogramów; Uwagi: zmienne domyślnie inicjowane są na NULL; wszystkie zadeklarowane elementy widoczne są dla użytkowników mających prawa dostępu do pakietu. Przykład 1: CREATE OR REPLACE PACKAGE pracownicy IS numer NUMBER:= 111; CURSOR nazwisko IS SELECT last_name FROM employees; PROCEDURE nazwisko (id number); FUNCTION zarobki (id number) RETURN NUMBER; END pracownicy; CREATE PACKAGE BODY Pracownicy IS jakaszmienna VARCHAR2(2); PROCEDURE nazwisko (id number) IS name employees.last_name%TYPE; BEGIN SELECT last_name INTO name FROM employees WHERE employee_id = id; DBMS_OUTPUT.PUT_LINE(last_name); END nazwisko; (…) END Pracownicy; Przykład 2 (pakiet bez zawartości): CREATE PACKAGE stale IS km2mile CONSTANT NUMBER := 1.6093; mile2km CONSTANT NUMBER := 0.6214; jard2metr CONSTANT NUMBER := 0.9144; metr2jard CONSTANT NUMBER := 1.0936; END stale; CREATE OR REPLACE FUNCTION zamiana(km NUMBER) RETURN NUMBER IS BEGIN RETURN (km*stale.km2mile); END; 5.3. Wymienić sposoby wywoływania elementów pakietu z linii o o o komend: EXECUTE nazwapakietu.nazwaElementu; EXECUTE Pracownicy.nazwisko(100); gdy ze schematu innego użytkownika: EXECUTE HR.Pracownicy.nazwisko(100); wewnątrz bloku - tak samo jak wywołanie normalnych elementów tylko poprzedzone nazwą pakietu, do którego należą; gdy pakiet pochodzi z innego schematu dodatkowo na początku umieszczamy nazwę schematu. 5.4. Opisać przeciążanie podprogramów. Przykład możliwość zadeklarowania procedury/funkcji z tą samą nazwą więcej niż raz; konieczność rozróżnienia przeciążanych podprogramów za pomocą parametrów (ich liczby, rodzin typów lub kolejności); możliwość nadpisania lokalnych podprogramów z pakietu. Nie można przeciążać: gdy parametry są w tej samej rodzinie typów (np. NUMBER i DECIMAL); gdy są podtypami tej samej rodziny (VARCHAR i STRING są podtypami VARCHAR2); gdy funkcje różnią się tylko zwracanym typem. Przykład: CREATE OR REPLACE PACKAGE dept IS PROCEDURE add_dept(id NUMBER, name VARCHAR2 :='edu', location VARCHAR); PROCEDURE add_dept(name VARCHAR2); END dept; 5.5. Czym są wyzwalacze? bloki składowane w bazie, które są uruchomiane w momencie wystąpienia jakiegoś zdarzenia; wyzwalacze definiowane są na perspektywie, tabeli, schemacie użytkownika bądź na całej bazie Możliwości uruchomienia wyzwalacza: wystąpienie DML (INSERT, UPDATE, DELETE); wystąpienie DDL (CREATE, ALTER, DROP); wystąpienie operacji na bazie danych takich jak SERVERERROR, LOGON, LOGOFF, SHUTDOWN, STURTUP. 5.6. Wyzwalacze DML możliwe instrukcje wywołujące wyzwalacz: o INSERT o UPDATE [OF kolumna] o DELETE może być więcej niż jedna instrukcja o INSERT OR DELETE o INSERT OR UPDATE OR DELETE zawartość wyzwalacza określa jakie akcje zostaną podjęte w momencie użycia wyzwalacza (może być blokiem, odwołaniem do procedur). 5.7. Opisać budowę wyzwalacza. Podać przykład CREATE TRIGGER nazwa BEFORE | AFTER | INSTEAD OF INSERT | UPDATE | DELETE ON nazwaObiektu [REFERENCING OLD AS old /NEW AS new] [FOR EACH ROW WHEN (condition)] [DECLARE] BEGIN (…) END; Przykład: CREATE OR REPLACE TRIGGER godziny BEFORE INSERT ON employees BEGIN IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND '18:00') THEN RAISE_APPLICATION_ERROR(-20500,'nie można nic wstawić przecież nie pracujesz'); END IF; END; 5.8. W jakich sytuacjach wyzwalacz zostanie uruchomiony raz a kiedy wiele razy gdy zapytanie operuje na jednym wierszu – trigger zostanie odpalony raz (obojętnie czy jest zdefiniowany z opcją każdego wiersza czy bez opcji), np. INSERT INTO departments(department_id) VALUES (3); gdy zapytanie dotyczy wielu wierszy: z opcją FOR EACH ROW wyzwalacz zostanie odpalony wiele razy, bez opcji – tylko raz, np. UPDATE employees SET salary=salary*1.2 WHERE department_id=50; 5.9. Podać przykład wyzwalacza wierszowego CREATE TRIGGER widelki BEFORE INSERT OR UPDATE OF salary ON employees FOR EACH ROW BEGIN IF NOT (:NEW.job_id IN ('AD_PRES','AD_VP')) AND :NEW.SALARY >15000 THEN RAISE APPLICATION_ERROR(-20202, 'za dużo chcesz zarabiać'); END IF; END; Wykład: ZSBDwyk06.ppt 6.1. Podaj przykładowe zastosowanie Obiektowych baz danych i czym się te dziedziny charakteryzują? Dziedziny zastosowań Telekomunikacja (złożona infrastruktura) Informacja przestrzenna Multimedialne bazy danych (produkcja – Ford, Boening, Simens) Charakterystyka dziedzin Złożone typy danych Złożone struktury Zależności hierarchiczne 6.2. Jakie założenia modelu obiektowego zostały wykorzystane w OBD? Dane wykorzystują założenia modelu obiektowego Klasy Dziedziczenie Metody Przeciążanie metod Referencje do obiektów itd. 6.3. Jakie założenia baz danych zostały wykorzystane w OBD? Zapewnione założenia baz danych Trwałość danych Integralność danych Współbieżne wykonywanie transakcji Interakcyjne uzyskiwanie informacji z bazy Odzyskiwanie danych w wyniku awarii Kontrola dostępu uprawnionych użytkowników 6.4. Powody stosowania OBD Brak podziału aplikacja – baza Bogatszy model danych – więcej można określić w samym modelu Możliwość rozszerzania modelu danych (definiowanie typów przez użytkownika) Łatwiejsze modelowanie hierarchii 6.5. Podaj cztery składniki standardu ODMG 3.0 Cztery składniki: Opis modelu Definicja danych – ODL Język zapytań – OQL Rozszerzenia Javy, Smalltalka, C++ do przetwarzania trwałych obiektów bazy danych – OML 6.6. Opisz model ODMG 3.0 Struktura danych Obiekty, literały Typy obiektów – atomowe, kolekcje (krotka, zbiór, wielozbiór, lista, tablica, słownik) Możliwe związki binarne1:1, 1:n, m:n poprzez referencje Wielodostęp, transakcje Transakcja jako jednostka programowa przeprowadzająca z bazę ze stanu spójnego w inny stan spójny Wielodostęp realizowany przez blokady (odczyt, zapis) Integralność danych Unikalności obiektów – Poprzez OID Referencyjna – poprzez referencje w obiektach 6.7. Scharakteryzuj język ODL Służy do definicji danych Definiuje klasy Funkcjonalność klasy definiowana poprzez atrybuty związki i metody Atrybuty – nazwa + typ Typy: Proste – liczbowe, tekstowe, daty Złożone: krotki – struct, zbioru – set, wielozbioru – multiset, listy – list, tablicy – array, słownika – dictionary, odwołujące się do innej klasy Związki – zawiera nazwę, typ i odwołanie do związku zwrotnego Metody – zawierają typ zwracanej wartości, nazwę oraz listę parametrów przekazywanych do metody, dodatkowo może wystąpić lista wyjątków Rodzaje i typy parametrów In, out, inout Typy dowolne – tak jak typy danych 6.8. Podaj składnię lub przykładowe polecenie tworzące klasę w OBD class nazwa_klasy [extends nadklasa][:interfejs] [(extent ekstensja)]{ … }; class Pracownik extends Osoba { …}; 6.9. Podaj składnię lub przykładowe polecenie tworzące atrybuty klas w OBD attribute attribute attribute attribute dziedzina nazwa_atrybutu; string Imie; Address adres; set<Telefon> numery_telefonu; 6.10. Podaj składnię lub przykładowe polecenie tworzące relacje klas w OBD relationship powiązana_klasa nazwa_relacji inverse powiązana_klasa::nazwa_relacji_w_pow_klasie relationship Nauczyciel teacher inverse Nauczyciel::uczniowie; relationship set<Uczeń> uczniowie inverse Uczeń::nauczyciel; 6.11. Podaj składnię lub przykładowe polecenie tworzące atrybuty klas w OBD typ nazwa(parametry) raises (listaWyjątków); void podajNumer(out string kierunkowy, out string numer) raises (nieMAtakiegoNUMERU); 6.12. Scharakteryzuj język QDL. Wzorowany na SQL Obejmuje tylko zapytania Ogólna składnia – SELECT FROM WHERE – bardziej rozbudowane atrybuty Wyrażenia ścieżkowe – możliwość odwołania się do obiektów poprzez relację pomiędzy obiektami Operacje łączenia poprzez związki między obiektami ustalane przez użytkownika Polimorfizm i dynamiczne wiązanie 6.13. Zachowanie trwałości danych w OBD Koniczność składowania danych przez dłuższy czas (nie tylko podczas działania aplikacji) Rozróżnienie pomiędzy danymi trwałymi a działającymi lokalnie w programie (nietrwałe) Trwałość przypisana do obiektów a nie do całej klasy Obiekty mogą być zmieniane z trwałych na nietrwałe i na odwrót Przetwarzanie obiektów trwałych i nietrwałych nie różni się Dwa typy obiektów trwałych Utrwalone Odwołujące się do obiektów trwałych 6.14. Zachowanie trwałości danych w OBD Unikatowość zapewniona przed OID Referencyjna zapewniona przez związki pomiędzy obiektami Integralność użytkownika dotycząca danych jednostkowych, np. nazwisko niepuste właściwe zależności w danej klasie, np. data urodzenia nie większa niż data zgonu przy modyfikacji danych – uwzględnienie znikających obiektów Specyficzna dla modelu obiektowego możliwość przechodzenia z jednej klasy do innej możliwość przynależności do wielu klas, klasy rozłączne ograniczenia dotyczące podklas redefinicja metod, atrybutów – można zabronić możliwość dodania nowych metod względnie atrybutów Wykład: ZSBDwyk07.ppt 7.1. Jakie elementy dodano do RDBMS w obiektowo relacyjnych bazach danych? Główne elementy dodane do RDBMS: procedury, funkcje; możliwość definicji nowych również złożonych typów danych; definicja obiektowych i referencyjnych typów danych; dziedziczenie, polimorfizm. 7.2. Podać składnie definiowania typu obiektów. Przykład Składnia: create type NazwaTypu as object (definicja danych); Przykłady: CREATE TYPE punkt AS OBJECT ( X float, Y float); CREATE TYPE odcinek AS OBJECT( P1 punkt, P2 punkt); CREATE TYPE tabela IS TABLE OF punkt; CREATE TYPE wielokat AS OBJECT( zbiorPunktow tabela); 7.3. Podać przykład definicji obiektu z metodami CREATE TYPE odcinek (p1 punkt, p2 punkt, MEMBER PROCEDURE nowyKoncowy(p punkt), MEMBER FUNCTION dlugosc RETURN FLOAT); CREATE TYPE BODY odcinek MEMBER PROCEDURE nowyKoncowy(p punkt) IS BEGIN p2:=p; END nowyKoncowy; MEMBER FUNCTION dlugosc RETURN FLOAT IS BEGIN RETURN sqrt(power(self.p1.x-self.p2.x,2)+power(self.p1.y-self.p2.y,2)); END dlugosc; END; 7.4. Czym są i do czego służą konstruktory? funkcje deklarowanie w specyfikacji typu – CONSTRUCTOR FUNCTION; nazwa funkcji taka sama jak nazwa typu; służą do określenia w jaki sposób tworzone są obiekty danego typu; parametry przekazywane tak jak w normalnych funkcjach; funkcjonalność implementowana w ciele typu; jako typ zwracany jest: RETURN SELF AS RESULT. Przykład: CREATE TYPE kula AS OBJECT ( …, CONSTRUCTOR FUNCTION kula (promien number) RETURN SELF AS RESULT,…); 7.5. Podać przykład dziedziczenia CREATE TYPE osoba AS OBJECT ( imie varchar2(20), nazwisko varchar2(20), dataUrodzenia date, MEMBER FUNCTION wiek RETURN number) not final; CREATE TYPE student UNDER osoba ( numerIndeksu char(6), rokStudiow number); 7.6. Czym są typy i metody abstrakcyjne Typy: nie można na ich podstawie tworzyć tabel; not instantiable – po definicji całego typu. Metody: tylko definicja nagłówka – bez ciała; musi zostać nadpisana w podklasie; not instantiable – przed słowem member. 7.7. Podać przykład nadpisywania metod CREATE OR REPLACE TYPE bryla AS OBJECT( Typ VARCHAR(20), NOT INSTANTIABLE MEMBER PROCEDURE skaluj (n number), NOT INSTANTIABLE MEMBER FUNCTION powierzchnia RETURN NUMBER, NOT INSTANTIABLE MEMBER FUNCTION objetosc RETURN NUMBER) NOT INSTANTIABLE NOT FINAL; CREATE OR REPLACE TYPE kula UNDER bryla( x FLOAT, y FLOAT, z FLOAT, r FLOAT, OVERRIDING MEMBER PROCEDURE skaluj (n number), OVERRIDING MEMBER FUNCTION powierzchnia RETURN NUMBER, OVERRIDING MEMBER FUNCTION objetosc RETURN NUMBER); CREATE OR REPLACE TYPE BODY kula AS OVERRIDING MEMBER PROCEDURE skaluj (n number) IS BEGIN SELF.r := self.r *n; END; OVERRIDING MEMBER FUNCTION powierzchnia RETURN NUMBER IS BEGIN RETURN 4*3.14 * self.r *self.r; END; OVERRIDING MEMBER FUNCTION objetosc RETURN NUMBER IS BEGIN RETURN 4/3*3.14*power(self.r,3); END; END; 7.8. Opisać operowanie na tabelach obiektów tworzenie tabeli obiektów: Składnia: CREATE TABLE nazwaTabeli OF nazwaTypuObiektu; Przykład: CREATE TABLE kule OF kula; wstawianie obiektów do tabeli: Przykłady: INSERT INTO kule VALUES(‘kulka’,1,2,3,9); INSERT INTO kule VALUES(kula(‘pilka’,1,1,1,2)); INSERT INTO odcinki VALUES (new odcinek(new punkt(1,1), new punkt(2,2))); każdy obiekt otrzymuje identyfikator, który można odczytać za pomocą ref(obiekt); odczyt wartości: value(obiekt), bądź poszczególne pola, metody: obiekt.pole, obiekt.metoda. 7.9. Czym są tabele heterogeniczne Zawierają dane o różnych typach (np. tabela na podstawie typu bryły – zawiera kule i inne). Przykład: CREATE TABLE bryly OF bryla; INSERT INTO bryly VALUES(new kula(1,1,1,2)); INSERT INTO bryly VALUES(new szescian(3)); INSERT INTO bryly VALUES(new prostopadloscian(2,3,4)); 7.10. Czym jest typ REF umożliwia zapisywanie wskaźników do obiektów wierszy; jest stosowany do określenia związku pomiędzy obiektami; wartości typu REF – identyfikatory obiektów powiązanych; związki REF jednokierunkowe (inaczej niż w obiektowych). 7.11. Podać przykład użycia REF CREATE TYPE nauczyciel AS OBJECT( imie VARCHAR2(20), nazwisko VARCHAR2(20)); CREATE TYPE przedmiot AS OBJECT( nazwa VARCHAR2(20), prowadzacy REF nauczyciel); CREATE TABLE profki OF nauczyciel; CREATE TABLE przedmioty OF przedmiot; Wstawianie do tabeli z referencją: INSERT INTO profki VALUES ('Stefan','Batory'); INSERT INTO przedmioty SELECT 'bazy danych', ref(p) FROM profki p WHERE imie='Stefan'; 7.12 Podać przykład zawierający związki dwustronne CREATE TYPE nauczyciel; CREATE TYPE lista AS TABLE OF uczen; CREATE TYPE klasa AS OBJECT ( nazwa VARCHAR2(30), wychowawca REF nauczyciel, uczniowie lista); CREATE TYPE nauczyciel AS OBJECT ( nazwisko VARCHAR2(30), wychowuje REF klasa); 7.13. Omówić tworzenie zapytań aby pobrać wszystkie elementy tabeli należy użyć gwiazdki, np. SELECT * FROM kule; odwołanie do poszczególnych kolumn – poprzez ustawienie aliasu do tabeli i odwołanie przez alias; specjalne wartości obiektów: o ref(o) – identyfikator obiektu; o value(o) – wartość obiektu; Przykład: SELECT value(k), ref(k) FROM kule k; gdy wybieramy element z nadklasy – pokazuje nam wszystko z podklas, np.: SELECT * FROM bryly; SELECT value(b) FROM bryly b; o ograniczenie do podklasy – „IS OF”, np. SELECT value(b) FROM bryly b WHERE value(b) IS OF (kula); odwołanie do metod – alias.nazwaMetody, np. SELECT b.powierzchnia(), b.objetosc() FROM bryly b; Uwaga: wyniki są pokazane dla wszystkich podklas. 7.14. Omówić modyfikowanie i usuwanie typów modyfikowanie: ALTER TYPE nazwa opcje; o ADD MEMBER FUNCTION|PROCEDURE – dodanie funkcji, procedury; o ADD ATTRIBUTE – dodanie atrybutu (może być więcej niż jeden); o MODIFY ELEMENT TYPE – zmiana definicji elementu; usuwanie typu: o można usunąć tylko, gdy do niczego się nie odwołuje, np. DROP TYPE nazwaTypu; o gdy typy odwołują się cyklicznie - opcja FORCE;