Obiektowe bazy danych. Model danych. Wprowadzenie obiektowy model danych. Obiekty w bazie danych definiowanie i przechowywanie składowe i metody

Podobne dokumenty
Obiektowe bazy danych

Plan. Rozszerzenie obiektowe w SZBD Oracle

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

Oracle PL/SQL. Paweł Rajba.

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

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006

Obiektowe bazy danych

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

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

Post-relacyjne bazy danych

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

Pakiety podprogramów Dynamiczny SQL

Procedury i funkcje składowane

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

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

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

Oracle PL/SQL. Paweł Rajba.

PODSTAWY BAZ DANYCH 13. PL/SQL

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

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

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

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

Język PL/SQL Pakiety podprogramów

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

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

15. Funkcje i procedury składowane PL/SQL

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

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

Relacyjne bazy danych. Podstawy SQL

Oracle PL/SQL. Paweł Rajba.

BAZA DANYCH SIECI HOTELI

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

PODSTAWY BAZ DANYCH. 17. Obiektowość w Oracle. 2009/2010 Notatki do wykładu "Podstawy baz danych"

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

Hurtownia Świętego Mikołaja projekt bazy danych

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Relacyjne bazy danych. Podstawy SQL

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

Obiektowe i obiektowo-relacyjne. bazy danych

Obiektowe bazy danych Obiektowe i obiektowo-relacyjne 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

Przykładowa baza danych BIBLIOTEKA

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

ACESS- zadania z wykorzystaniem poleceń SQL

Paweł Rajba

Bloki anonimowe w PL/SQL

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Język SQL. Rozdział 8. Język manipulowania danymi DML

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

Wykład 5. SQL praca z tabelami 2

Zasady transformacji modelu DOZ do projektu tabel bazy danych

Oracle11g: Wprowadzenie do SQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bloki anonimowe w PL/SQL

Rozszerzenia języka relacyjnych baz danych SQL

Język SQL, zajęcia nr 1

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

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Wykład 8. SQL praca z tabelami 5

Składowane procedury i funkcje

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Materiały do laboratorium MS ACCESS BASIC

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

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

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

ZSBD ćwiczenie 9. Obiektowo relacyjne systemy zarządzania bazą danych. Zaawansowane zagadnienia. Wymagania: ZSBD ćwiczenie 9

Język SQL. Rozdział 2. Proste zapytania

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

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

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

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

Model semistrukturalny

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

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

Bazy danych. Dr inż. Paweł Kasprowski

Programowanie obiektowe - 1.

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

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

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

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

Autor: Joanna Karwowska

Bazy Danych i Usługi Sieciowe

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

1 Kolekcje Operacje masowe VARRAY NESTED TABLES Tabele asocjacyjne Perspektywy obiektowe 10.

Cele. Definiowanie wyzwalaczy

ZSBD ćwiczenie 8. Obiektowo relacyjne systemy zarządzania bazą danych. Kolekcje. Wymagania: ZSBD ćwiczenie 8. Zaawansowane systemy baz danych - ZSBD

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

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

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

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Zaawansowane bazy danych i hurtownie danych semestr I

Bazy danych 10. SQL Widoki

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

ZSBD ćwiczenie 7. Obiektowo relacyjne systemy zarządzania bazą danych. Podstawy. Wymagania: ZSBD ćwiczenie 7. Zaawansowane systemy baz danych - ZSBD

Tabela wewnętrzna - definicja

Transkrypt:

1 Plan rozdziału 2 Obiektowe bazy danych Wprowadzenie obiektowy model danych Obiekty w bazie danych definiowanie i przechowywanie składowe i metody konstruktory referencje dziedziczenie i polimorfizm Kolekcje tablice o zmiennym rozmiarze tablice zagnieżdżone Perspektywy obiektowe Model danych 3 Obiektowy model danych 4 Model danych to abstrakcyjny opis sposobu reprezentacji i wykorzystania danych Na model danych składają się: struktura: kolekcja struktur wykorzystywanych do przedstawiania obiektów i encji modelowanego mini-świata, ograniczenia: reguły zapewniające spójność i poprawność danych operacje: zbiór operatorów stosowalnych do struktur w celu czytania i pisania danych Pojęcia podstawowe klasa: abstrakcyjna reprezentacja "rzeczy", zawiera definicję struktury i zachowania w postaci składowych i metod obiekt: wystąpienie klasy, reprezentacja konkretnego bytu metoda: zdolność obiektu do wykonania czynności relacyjny model danych Zwierzę baza danych przekazywanie komunikatów: sposób przekazywania danych lub wywoływania czynności między obiektami wywoływania czynności między obiektami dziedziczenie: uproszczony sposób specjalizacji klas enkapsulacja: ukrywanie złożoności obiektu za interfejsem polimorfizm: zdolność występowania obiektów w kontekście ich klas-przodków Drapieżnik Roślinożerca Lew Krokodyl Krowa obiektowy model danych aplikacja

Zalety modelu obiektowego 5 Model obiektowo-relacyjny 6 Modelowanie naturalna reprezentacja złożonych obiektów świata rzeczywistego naturalna reprezentacja relacji kompozycji naturalna reprezentacja interakcji między obiektami bezpośrednie powiązanie operacji z danymi Programowanie wielokrotne użycie kodu modularność i łatwość pielęgnacji zwiększone bezpieczeństwo i elastyczność brak konieczności konwersji między modelami danych na styku baza danych aplikacja (ang. O/R impedance mismatch) Umożliwia wykorzystanie mechanizmów obiektowych wewnątrz relacyjnej bazy danych abstrakcyjne typy danych definiowane przez użytkownika predefiniowane typy obiektowe dostarczane przez producentów oprogramowania (multimedia, dane przestrzenne) dziedziczenie, enkapsulacja, polimorfizm, klasy abstrakcyjne, dostępne mechanizmy relacyjne: SQL, przetwarzanie transakcyjne, zarządzanie współbieżnością, ścieżki dostępu, kopie bezpieczeństwa i protokoły odtwarzania spójności, Alternatywa dla systemów odwzorowania obiektoworelacyjnego (O/RM) Własności obiektowo-relacyjne w Oracle 7 Abstrakcyjne typy danych użytkownika 8 Obiektowe typy danych użytkownika metody, składowe, konstruktory, przeciążanie Współdzielenie obiektów referencje, nawigacja Dziedziczenie polimorfizm, przesłanianie metod, typy abstrakcyjne Kolekcje tabele o zmiennym rozmiarze, tabele zagnieżdżone Perspektywy obiektowe Każdy typ obiektowy składa się z dwóch części: deklaracji (interfejsu): zbioru składowych (pól i sygnatur metod) definicji (ciała): implementacji metod Pracownik nazwisko pensja etat data_ur CREATE TYPE Pracownik AS OBJECT ( nazwisko VARCHAR2(20), pensja NUMBER(6,2), etat VARCHAR2(15), data_ur DATE );

Trwałość obiektów 9 Tworzenie obiektów 10 Obiekty składuje się trwale w w dwóch postaciach: obiekty krotkowe (ang. row object) obiekty atrybutowe (ang. column object) Do przechowywania obiektów krotkowych wykorzystuje się tabele obiektów (ang. object table) PracownicyObjTab Obiekty atrybutowe są przechowywane jako wartości atrybutu w zwyczajnej tabeli symbol budzet kierownik AB 001 20 000 ProjektyTab XY 222 15 000 Do tworzenia obiektu służy specjalna metoda konstruktor Każdy typ obiektowy posiada konstruktor atrybutowy lista argumentów zgodna z listą atrybutów typu obiektowego podczas wywołania należy podać wartości wszystkich atrybutów Nazwa konstruktora jest identyczna z nazwą typu obiektowego Wywołanie konstruktora poprzedzamy słowem NEW Użytkownik może deklarować własne konstruktory Sposób tworzenia obiektu jest identyczny dla obiektów krotkowych i obiektów atrybutowych Obiekty krotkowe 11 Obiekty atrybutowe 12 Utworzenie tabeli obiektów Utworzenie tabeli z obiektami atrybutowymi CREATE TABLE PracownicyObjTab OF Pracownik; CREATE TABLE ProjektyTab ( symbol CHAR(6), nazwa VARCHAR(100), budzet NUMBER, kierownik Pracownik); Wstawienie obiektu krotkowego Wstawienie obiektu atrybutowego INSERT INTO PracownicyObjTab VALUES (NEW Pracownik('',2500,'ASYSTENT', DATE '1965-07-01')); INSERT INTO ProjektyTab VALUES ('AB 001','Projekt X',20000, NEW Pracownik('',3200,'ADIUNKT',null)); Dostęp obiektowy i relacyjny do obiektów krotkowych Dostęp obiektów atrybutowych i ich składowych SELECT VALUE(p) FROM PracownicyObjTab p; SELECT nazwa, kierownik FROM ProjektyTab; SELECT * FROM PracownicyObjTab; SELECT p.kierownik.nazwisko FROM ProjektyTab p; alias jest wymagany w przypadku dostępu do składowych obiektu atrybutowego

Definiowanie metod typu obiektowego 13 Definiowanie metod typu obiektowego 14 Typ obiektowy może posiadać następujące rodzaje metod MEMBER: metody wołane na rzecz konkretnego obiektu STATIC: metody wołane na rzecz całego typu obiektowego MAP/ORDER: metody wykorzystywane do porównywania obiektów CONSTRUCTOR: metody tworzące nowe obiekty ALTER TYPE Pracownik REPLACE AS OBJECT ( nazwisko VARCHAR2(20), pensja NUMBER(6,2), etat VARCHAR2(15), data_ur DATE, MEMBER FUNCTION wiek RETURN NUMBER, MEMBER PROCEDURE podwyzka(p_kwota NUMBER) ); Metoda jest definiowana dwukrotnie w deklaracji typu: sygnatura metody (nazwa i lista argumentów) w definicji typu: ciało metody (implementacja, kod źródłowy) CREATE OR REPLACE TYPE BODY Pracownik AS MEMBER FUNCTION wiek RETURN NUMBER IS RETURN EXTRACT (YEAR FROM CURRENT_DATE) EXTRACT (YEAR FROM data_ur); END wiek; MEMBER PROCEDURE podwyzka(p_kwota NUMBER) IS pensja := pensja + p_kwota; END podwyzka; Aktywowanie metod składowych 15 Tożsamość obiektów 16 Metody składowe mogą być uruchamiane: z poziomu SQL (tylko metody będące funkcjami) z poziomu PL/SQL (wszystkie metody) SELECT p.nazwisko, p.data_ur, p.wiek() FROM PracownicyObjTab p; DECLARE l_kierownik Pracownik; SELECT kierownik INTO l_kierownik FROM ProjektyTab WHERE symbol = 'AB 001'; l_kierownik.podwyzka(200); Tożsamość obiektu to unikalny i niezmienny identyfikator związany z danym obiektem przez cały cykl jego życia tożsamość posiadają tylko obiekty krotkowe tożsamość jest zapewniana przez OID (ang. object identifier) identyfikatory są lokalnie i globalnie unikalne, automatycznie indeksowane i zajmują 16B; można również wykorzystać klucz podstawowy tabeli obiektowej do generowania identyfikatorów OID aplikacja może wykorzystywać referencje do identyfikatorów, odczytywane za pomocą funkcji REF() SELECT VALUE(p), REF(p) FROM PracownicyObjTab p; UPDATE ProjektyTab SET kierownik = l_kierownik WHERE symbol = 'AB 001';

Porównywanie wartości obiektów 17 Metoda odwzorowująca 18 Wartością obiektu jest zbiór wartości jego składowych dwa obiekty są równe gdy mają te same wartości składowych standardowo, operatory = i!= umożliwiają porównywanie obiektów Porównywanie obiektów najczęściej wymaga sortowania operatory relacyjne: <, >, <=, >=, operator BETWEEN... AND..., klauzule ORDER BY, GROUP BY, DISTINCT porównywanie za pomocą funkcji odwzorowującej lub porządkującej f. odwzorowująca f. odwzorowująca 10 15 f. porządkująca -1 z {-1,0,1} 17 Dodanie sygnatury metody do deklaracji typu obiektowego ALTER TYPE Pracownik ADD MAP MEMBER FUNCTION odwzoruj RETURN NUMBER CASCADE INCLUDING TABLE DATA; Dodanie implementacji metody do definicji typu obiektowego CREATE OR REPLACE TYPE BODY Pracownik AS MEMBER FUNCTION wiek RETURN NUMBER IS RETURN EXTRACT (YEAR FROM CURRENT_DATE) EXTRACT (YEAR FROM data_ur); END wiek; MEMBER PROCEDURE podwyzka(p_kwota NUMBER) IS pensja := pensja + p_kwota; END podwyzka; MAP MEMBER FUNCTION odwzoruj RETURN NUMBER IS RETURN ROUND(pensja,-3) + wiek(); END odwzoruj; Wykorzystanie metod porównujących 19 Konstruktor 20 Zalecenia typ obiektowy może mieć tylko jedną metodę porównującą (porządkującą lub odwzorowującą) metody odwzorowujące są bardziej efektywne, metody porządkujące są bardziej elastyczne metody porównujące mogą być wywoływane jawnie lub niejawnie INSERT INTO PracownicyObjTab VALUES (NEW Pracownik('',2000,'ADIUNKT',DATE '1961-02-15')); INSERT INTO PracownicyObjTab VALUES (NEW Pracownik('Janiak',1800,'ASYSTENT',DATE '1973-12-02')); SELECT p.nazwisko, p.pensja, p.wiek() FROM PracownicyObjTab p ORDER BY VALUE(p); SELECT * FROM PracownicyObjTab p WHERE VALUE(p) > ( SELECT VALUE(r) FROM PracownicyObjTab r WHERE r.nazwisko = 'Janiak' ); Konstruktor to specjalna metoda tworząca nowe obiekty nazwa konstruktora jest taka sama jak nazwa typu obiektowego użytkownik może definiować własne konstruktory, może także przesłonić domyślny konstruktor atrybutowy konstruktory ułatwiają inicjalizację i umożliwiają ewolucję obiektów ALTER TYPE Pracownik REPLACE AS OBJECT ( nazwisko VARCHAR2(20), pensja NUMBER(6,2), etat VARCHAR2(15), data_ur DATE, MEMBER FUNCTION wiek RETURN NUMBER, MEMBER PROCEDURE podwyzka(p_kwota NUMBER), MAP MEMBER FUNCTION odwzoruj RETURN NUMBER, CONSTRUCTOR FUNCTION Pracownik(p_nazwisko VARCHAR2) RETURN SELF AS RESULT );

Implementacja konstruktora CREATE OR REPLACE TYPE BODY Pracownik AS MEMBER FUNCTION wiek RETURN NUMBER IS RETURN EXTRACT (YEAR FROM CURRENT_DATE) EXTRACT (YEAR FROM data_ur); END wiek; MEMBER PROCEDURE podwyzka(p_kwota NUMBER) IS pensja := pensja + p_kwota; END podwyzka; MAP MEMBER FUNCTION odwzoruj RETURN NUMBER IS RETURN ROUND(pensja,-3) + wiek(); END odwzoruj; CONSTRUCTOR FUNCTION Pracownik(p_nazwisko VARCHAR2) RETURN SELF AS RESULT IS SELF.nazwisko := p_nazwisko; SELF.pensja := 1000; SELF.etat := null; SELF.data_ur := null; RETURN; 21 Współdzielenie i zagnieżdżanie obiektów Kowalska Kolejowa Kowalska Kolejowa Kolejowa CREATE TYPE TAdres AS OBJECT ( ulica VARCHAR2(15), dom NUMBER(4), mieszkanie NUMBER(3)); CREATE TYPE Osoba AS OBJECT ( nazwisko VARCHAR2(20), imie VARCHAR2(15), adres TAdres); CREATE TYPE Osoba AS OBJECT ( nazwisko VARCHAR2(20), imie VARCHAR2(15), adres REF TAdres); 22 Wiązanie obiektów współdzielonych 23 Wykorzystanie referencji do nawigacji 24 Utworzenie tabel obiektowych CREATE TABLE AdresyObjTab OF TAdres; CREATE TABLE OsobyObjTab OF Osoba; ALTER TABLE OsobyObjTab ADD SCOPE FOR(adres) IS AdresyObjTab; Wstawienie obiektów INSERT INTO AdresyObjTab VALUES (NEW TAdres('Kolejowa',2,18)); aby zawęzić zakres referencji tabela OsobyObjTab musi być pusta Referencje można wykorzystać w następujący sposób nawigacja jawna przez wywołanie funkcji DEREF() nawigacja niejawna przez notację kropkową operacja połączenia tabel przez porównanie referencji SELECT o.imie, o.nazwisko, DEREF(o.adres) FROM OsobyObjTab o; INSERT INTO OsobyObjTab VALUES (NEW Osoba('Kowalska','Anna',null)); INSERT INTO OsobyObjTab VALUES (NEW Osoba('','Jan',null)); SELECT o.imie, o.nazwisko, o.adres.ulica, o.adres.dom FROM OsobyObjTab o; UPDATE OsobyObjTab o SET o.adres = ( SELECT REF(a) FROM AdresyObjTab a WHERE a.ulica = 'Kolejowa' ); SELECT o.imie, o.nazwisko, a.ulica, a.dom, a.mieszkanie FROM OsobyObjTab o JOIN AdresyObjTab a ON o.adres = REF(a);

Wiszące referencje 25 Ograniczenia integralnościowe i słownik bazy danych 26 Usunięcie obiektu nie usuwa referencji do obiektu Definiowanie ograniczeń integralnościowych jest możliwe tylko dla tabel obiektowych Kowalska Kolejowa DELETE FROM AdresyObjTab a WHERE a.ulica = 'Kolejowa'; ALTER TABLE OsobyObjTab ADD PRIMARY KEY(imie,nazwisko); ALTER TABLE PracownicyObjTab ADD CONSTRAINT niezerowa_pensja CHECK (pensja > 0); Kowalska? SELECT * FROM OsobyObjTab o WHERE o.adres IS NULL; SELECT * FROM OsobyObjTab o WHERE o.adres IS DANGLING; ALTER TABLE PracownicyObjTab ADD CONSTRAINT niepusty_etat etat NOT NULL; Perspektywy USER_TYPES i USER_SOURCE słownika SELECT type_name,typecode,attributes,methods FROM user_types; SELECT text FROM user_source WHERE name = 'OSOBA'; Kolekcje 27 Porównanie typów kolekcji 28 Kolekcje to zbiory obiektów tablica o zmiennym rozmiarze (ang. varray) własność VARRAY NESTED TABLE (1) (2) (3) (4) (5) maksymalny rozmiar tak nie Kowalsk ki Malinow wski ograniczony zakres usuwanie elementów ze środka kolekcji nie tak składowanie w bazie danych in-line out-line tablica zagnieżdżona (ang. nested table) (1) (2) (3) (4) (5) Malinowski zachowanie fizycznego porządku tak nie manipulowanie na pojedynczych elementach kolekcji w SQL nie tak

Tworzenie kolekcji 29 Metody kolekcji 30 Kolekcje mogą być tworzone: na poziomie SQL: tworzone na stałe w bazie danych na poziomie PL/SQL: lokalne deklaracje na potrzeby programu CREATE TYPE Telefony AS VARRAY(10) OF VARCHAR(15); DECLARE TYPE Telefony IS VARRAY(10) OF VARCHAR(15); moi_znajomi Telefony;... metoda opis kolekcja(wartość,...) konstruktor kolekcji, opcjonalnie wstawia wartości jako kolejne elementy kolekcji EXTEND([n],[i]) TRIM([n]) DELETE([n],[m]) NEXT(n), PRIOR(n) rozszerza kolekcję o n pustych elementów, opcjonalnie wypełnia wartością i-tego elementu usuwa n elementów od końca kolekcji usuwa wszystkie elementy kolekcji, n-ty element, lub elementy od n-tego do m-tego zwraca indeks elementu następującego (poprzedzającego) elementu o indeksie n kolekcja typu tabela o zmiennym rozmiarze utworzona z poziomu SQL i PL/SQL kolekcja typu tabela zagnieżdżona utworzona z poziomu SQL i PL/SQL CREATE TYPE Zespol AS TABLE OF Pracownik; DECLARE TYPE Zespol IS TABLE OF Pracownik; bazy_danych Zespol;... EXISTS(n) FIRST, LAST LIMIT COUNT testuje istnienie elementu o indeksie n zwraca indeks pierwszego (ostatniego) elementu zwraca maksymalny zakres kolekcji zwraca liczbę elementów kolekcji Tabela o zmiennym rozmiarze w PL/SQL 31 Tabela o zmiennym rozmiarze w SQL 32 DECLARE znajomi Telefony := Telefony(); znajomi.extend(); znajomi(1) := 'Bolek 1234567'; znajomi.extend(znajomi.limit()-znajomi.count(),1); FOR i IN 1..znajomi.COUNT() LOOP DBMS_OUTPUT.PUT_LINE(znajomi(i)); END LOOP; znajomi.trim(4); znajomi(2) := 'Lolek 9876543'; znajomi(5) := 'Tola 0102030'; Jeśli kolekcja jest tabelą o zmiennym rozmiarze nie można manipulować pojedynczymi elementami w SQL elementy zachowują fizyczny porządek CREATE TABLE znajomi (imie VARCHAR(100), kontakt Telefony); INSERT INTO znajomi VALUES ('Bolek', Telefony('1234567','2345678')); INSERT INTO znajomi VALUES ('Lolek', Telefony('1111111','2222222')); SELECT kontakt FROM znajomi WHERE imie = 'Bolek'; FOR i IN 1..znajomi.COUNT() LOOP DBMS_OUTPUT.PUT_LINE(znajomi(i)); END LOOP; UPDATE znajomi SET kontakt = Telefony('1234567','2345678','3456789') WHERE imie = 'Bolek';

Tabela zagnieżdżona w PL/SQL DECLARE bazy_danych Zespol := Zespol(); i NUMBER; bazy_danych.extend(1); bazy_danych(1) := NEW Pracownik('Bolek'); bazy_danych.extend(5,1); bazy_danych.delete(2,3); FOR i IN 1..bazy_danych.LAST() LOOP IF bazy_danych.exists(i) THEN DBMS_OUTPUT.PUT_LINE(bazy_danych(i).nazwisko); END IF; END LOOP; bazy_danych(4) := NEW Pracownik('Lolek'); bazy_danych(5) := NEW Pracownik('Tola'); i := bazy_danych.first(); WHILE (i IS NOT NULL) LOOP DBMS_OUTPUT.PUT_LINE(bazy_danych(i).nazwisko); i := bazy_danych.next(i); END LOOP; 33 Tabela zagnieżdżona w SQL Jeśli kolekcja jest tabelą zagnieżdżoną można manipulować pojedynczymi elementami w SQL należy wskazać tabelę out-line do przechowywania kolekcji CREATE TABLE projekty(nazwa VARCHAR(100), wykonawcy Zespol) NESTED TABLE wykonawcy STORE AS wykonawcy_projektu; INSERT INTO projekty VALUES ('Archiwum X', NEW Zespol(NEW Pracownik('Bolek'), NEW Pracownik('Lolek'))); SELECT * FROM TABLE( SELECT wykonawcy FROM projekty WHERE nazwa = 'Archiwum X'); INSERT INTO TABLE ( SELECT wykonawcy FROM projekty WHERE nazwa = 'Archiwum X') VALUES (NEW Pracownik('Tola')); UPDATE TABLE ( SELECT wykonawcy FROM projekty WHERE nazwa = 'Archiwum X') SET etat = 'KIEROWNIK', pensja = 5000 WHERE nazwisko = 'Bolek'; 34 Dziedziczenie Dziedziczenie polega na definiowaniu nowego typu obiektowego w oparciu o istniejący typ obiektowy nowy typ stanowi podtyp (specjalizację) swojego nadtypu (przodka) podtyp dziedziczy wszystkie składowe i metody MEMBER i STATIC podtyp może dodawać nowe składowe i przesłaniać metody każdy podtyp może mieć tylko jeden nadtyp podtyp może dziedziczyć tylko z nadtypu który został zadeklarowany jako NOT FINAL (uwaga: domyślnie każdy typ jest FINAL) metody porządkujące mogą się pojawić tylko w korzeniu hierarchii Dydaktyk Profesor Pracownik Administrator 35 Dziedziczenie ALTER TYPE Pracownik NOT FINAL CASCADE; przesłonięcie metody CREATE TYPE Dydaktyk UNDER Pracownik ( tytul VARCHAR2(10), OVERRIDING MEMBER FUNCTION wiek RETURN NUMBER, MEMBER FUNCTION wiek(l_data DATE) RETURN NUMBER); przeciążenie metody CREATE TYPE BODY Dydaktyk AS OVERRIDING MEMBER FUNCTION wiek RETURN NUMBER IS RETURN ROUND(MONTHS_BETWEEN(CURRENT_DATE, data_ur)); END wiek; MEMBER FUNCTION wiek(l_data DATE) RETURN NUMBER IS RETURN EXTRACT(YEAR FROM l_data) EXTRACT(YEAR FROM data_ur); END wiek; 36

Polimorfizm 37 Perspektywy obiektowe 38 Polimorfizm powoduje, że obiekty podtypu mogą zachowywać się jak obiekty swojego nadtypu zamiast obiektu nadtypu można wykorzystać obiekt podtypu zamiast obiektu podtypu można wymusić wykorzystanie obiektu nadtypu przez użycie operatora TREAT wybór wersji metody przeciążonej następuje w momencie wykonania programu (metody są wirtualne) CREATE TABLE pracownicyidydaktycyobjtab OF PRACOWNIK; INSERT INTO pracownicyidydaktycyobjtab VALUES (NEW Pracownik('Bolek',2000,'ASYSTENT',DATE '1969-09-03')); INSERT INTO pracownicyidydaktycyobjtab VALUES (NEW Dydaktyk('Lolek',5000,'PROF.',DATE '1949-11-13','dr.')); SELECT p.nazwisko, p.wiek() FROM pracownicyidydaktycyobjtab p; aplikacje perspektywy obiektowe świat relacyjny Perspektywy obiektowe - przykład ZESPOLY PRACOWNICY Departament CREATE TYPE PracownicyTab AS TABLE OF Pracownik; CREATE TYPE Departament AS OBJECT ( nazwa VARCHAR2(100), adres VARCHAR2(100), pracownicy PracownicyTab, MEMBER FUNCTION ilupracownikow RETURN NUMBER ); CREATE OR REPLACE TYPE BODY Departament AS MEMBER FUNCTION ilupracownikow RETURN NUMBER IS RETURN pracownicy.count(); END ilupracownikow; Pracownik 39 Perspektywy obiektowe - przykład Utworzenie perspektywy obiektowej CREATE OR REPLACE VIEW DepartamentyObjView OF Departament WITH OBJECT OID(nazwa) AS SELECT z.nazwa, z.adres, CAST( MULTISET( SELECT NEW Pracownik(nazwisko,placa_pod,etat,zatrudniony) FROM pracownicy WHERE id_zesp = z.id_zesp) AS PracownicyTab) FROM zespoly z; Możliwe zapytania SELECT * FROM DepartamentyObjView; SELECT d.nazwa, d.adres, d.ilupracownikow() FROM DepartamentyObjView d; SELECT nazwisko, pensja, etat, data_ur FROM TABLE( SELECT pracownicy FROM DepartamentyObjView WHERE nazwa = 'SYSTEMY ROZPROSZONE' ); 40