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

Podobne dokumenty
Pakiety podprogramów Dynamiczny SQL

Język PL/SQL Pakiety podprogramów

Oracle PL/SQL. Paweł Rajba.

Procedury i funkcje składowane

Obiektowe bazy danych

PODSTAWY BAZ DANYCH 13. PL/SQL

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

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

15. Funkcje i procedury składowane PL/SQL

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

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

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

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

Model semistrukturalny

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

Projektowanie systemów baz danych

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

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

Relacyjne bazy danych. Podstawy SQL

Wykład 5. SQL praca z tabelami 2

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

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

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Relacyjne bazy danych. Podstawy SQL

Post-relacyjne bazy danych

Ćwiczenia laboratoryjne nr 11 Bazy danych i 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

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

Cele. Definiowanie wyzwalaczy

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów

Wykład 8. SQL praca z tabelami 5

Oracle PL/SQL. Paweł Rajba.

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

Język SQL, zajęcia nr 1

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

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

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

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

Obiektowe bazy danych

Wykład 05 Bazy danych

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

BAZA DANYCH SIECI HOTELI

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

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

PL/SQL. Zaawansowane tematy PL/SQL

Bazy danych. Dr inż. Paweł Kasprowski

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Informatyka I BAZY DANYCH. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2017

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

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

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

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

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

1. Wyzwalacze BD (ang. triggers)

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

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

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Przestrzenne bazy danych Podstawy języka SQL

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

Oracle10g: Programowanie w PL/SQL

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Bazy danych - Materiały do laboratoriów VIII

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

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

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Składowane procedury i funkcje

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

Bazy Danych i Usługi Sieciowe

Obiektowe i obiektowo-relacyjne. bazy danych

Tworzenie raportów XML Publisher przy użyciu Data Templates

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

Bloki anonimowe w PL/SQL

PODSTAWY BAZ DANYCH. 10. Partycjonowanie tabel i indeksów. 2009/ Notatki do wykładu "Podstawy baz danych"

Programowanie w Ruby

PL/SQL. Zaawansowane tematy PL/SQL

Paweł Rajba

Technologia informacyjna

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

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

Bazy danych - wykład wstępny

Oracle11g: Wprowadzenie do SQL

Systemowe aspekty baz

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

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

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

Bazy danych i usługi sieciowe

Systemy GIS Tworzenie zapytań w bazach danych

SQL 4 Structured Query Lenguage

Aspekty aktywne baz danych

Transkrypt:

PODSTAWY BAZ DANYCH 17. Obiektowość w Oracle 1

Obiektowa baza danych Obiektowe bazy danych (OBD) powstały początkowo jako rozwinięcie programowania obiektowego. Bazy danych zorientowane obiektowo przechowują obiekty - kombinacje danych o dowolnej strukturze razem ze skojarzonymi metodami (procedurami). Zalety: 1. Złożone obiekty. 2. Typy danych definiowane przez użytkownika, rozszerzalność. 3. Hierarchia, dziedziczenie. 4. Metody i funkcje przechowywane wraz z danymi. 2

Obiektowa baza danych Wady: 1. Brak optymalizacji zapytań (rozumianej jak w poprzednich modelach). 2. Duże koszty wiążące się z migracją dużych systemów. 3. Brak opracowanych standardów. 4. Mniejsza wydajność (chociaż wciąż rośnie) od RDBMS (relacyjne bazy danych). Obiektowe bazy nie są określone żadnym oficjalnym standardem. Jednym z podstawowych celów modelu obiektowego jest bezpośrednie odwzorowanie obiektów i powiązań między nimi, wchodzących w skład aplikacji, na zbiór obiektów i powiązań w bazie danych. 3

Obiektowa baza danych Dzięki mechanizmom obiektowym można też zwiększyć niezależność danych od aplikacji poprzez przeniesienie procedur obsługi danych (w postaci metod) do systemu zarządzania bazą. W chwili obecnej brak jest profesjonalnych SZBD typowo obiektowych. Niektóre SZBD mają możliwość implementacji modelu obiektowego i dla nich używa się nazwy relacyjno-obiektowe SZBD: Informix Universal Server, DB2 Universal Database (IBM), Oracle, 4

Obiektowa baza danych Obiektowe bazy starają się zachować wiele technologii, które sprawdziły się w systemach relacyjnych, takie jak: architektura klient/serwer, mechanizmy indeksowania, przetwarzanie transakcji, optymalizacja zapytań (???), 5

Obiektowość w Oracle Oto przykłady deklaracji typów Adres i Osoba: CREATE TYPE Adres AS OBJECT ( miasto VARCHAR2(30), ulica VARCHAR2(30), numer VARCHAR2(10), kod CHAR(6) ); CREATE TYPE Osoba AS OBJECT ( imie VARCHAR2(15), nazwisko VARCHAR2(30), dane_adresowe Adres, data_ur DATE ); 6

Obiektowość w Oracle Można tworzyć typ bez specyfikacji i później go modyfikować. CREATE TYPE Osoba; lub CREATE OR REPLACE TYPE Osoba; Usuwanie typu DROP TYPE Osoba; Najprostszym sposobem zmaterializowania typu obiektowego, czyli utworzenia obiektu reprezentującego dany typ, jest posłużenie się programem PL/SQL. 7

Obiektowość w Oracle DECLARE osoba1 Osoba; BEGIN osoba1 := Osoba( Jan, Kowalski, Adres( Łódź, Piotrkowska, 80, 95-100 ), TO_DATE( 21/04/1970, dd/mm/yyyy )); osoba1.dane_adresowe.kod:= 95-200 ; END; Obiekt osoba1 utworzony powyżej ma charakter ulotny, tzn. jego istnienie ogranicza się jedynie do bloku programu PL/SQL i po jego zakończeniu zostaje on usuwany z bazy danych. 8

Obiektowość w Oracle W celu trwałego przechowywania obiektów w bazie danych należy utworzyć tabelę przechowującą obiekty, a następnie wypełniać ją obiektami przy pomocy poleceń INSERT. Oracle udostępnia dwa sposoby do trwałego przechowywania obiektów w tabelach: obiekty kolumnowe, obiekty wierszowe. 9

Obiektowość w Oracle Podczas definicji tabeli, której jeden z atrybutów jest typu obiektowego, tworzy się kolumna składująca obiekty kolumnowe (ang. column objects), np.: CREATE TABLE pracownicy ( numer NUMBER(4), dane_osobowe Osoba, pensja NUMBER(7,2) ); INSERT INTO pracownicy VALUES ( 1234, Osoba( Jan, Kowalski, Adres( Łódź, Piotrkowska, 80, 95-100 ), TO_DATE( 21/04/1970, dd/mm/yyyy )), 1500 ); 10

Obiektowość w Oracle Do tak zapisanych danych można odwoływać się standardowymi poleceniami SELECT, UPDATE, DELETE tak jak gdyby atrybut obiektowy był normalnym atrybutem typu wbudowanego. 11

Obiektowość w Oracle SELECT p.dane_osobowe, p.pensja FROM pracownicy p WHERE p.dane_osobowe.data_ur < TO_DATE('2000/02/02, yyyy/mm/dd ) AND p.dane_osobowe.dane_adresowe.miasto= Łódź ; DANE_OSOBOWE(IMIE, NAZWISKO, DANE_ADRESOWE(MIASTO, ULICA, NUMER, KOD), DATA_UR) --------------------------------------------------------------- PENSJA --------------- OSOBA( Jan', Kowalski', ADRES( Łódź', Piotrkowska', '80/82', '95-100'), '00/01/01') 1500 12

Obiektowość w Oracle Przykład polecenia UPDATE: UPDATE pracownicy p SET p.dane_osobowe.dane_adresowe.miasto = Warszawa WHERE p.dane_osobowe.data_ur < TO_DATE('2000/02/02, yyyy/mm/dd ) AND p.dane_osobowe.dane_adresowe.miasto = Łódź ; 13

Obiektowość w Oracle Drugim sposobem zapewnienia trwałości obiektów w bazie jest zdefiniowanie tzw. tabeli obiektów (ang. object table) przechowującej tzw. obiekty wierszowe (ang. row objects). CREATE TABLE osoby OF Osoba; INSERT INTO osoby VALUES ( Osoba( Jan, Kowalski, Adres( Łódź, Piotrkowska, 80, 95-100 ), TO_DATE( 2000/01/01, yyyy/mm/dd )) ); 14

Obiektowość w Oracle Wydobywanie danych z tabeli obiektów odbywa się na dwa sposoby: relacyjny; obiektowy; pokazane odpowiednio poniżej: Relacyjnie: SELECT * FROM osoby o WHERE o.imie = Jan ; Obiektowo: SELECT VALUE(o) FROM osoby o WHERE o.imie = Jan ; 15

Obiektowość w Oracle W formie relacyjnego zapytania alias o jest niekonieczny (atrybut imie jest jednoznacznie interpretowany jako kolumna tabeli osoby). Alias o zdefiniowany w zapytaniu obiektowym pełni rolę zmiennej korelacyjnej umożliwiającej dostęp do poszczególnych obiektów składowanych w tabeli obiektów. Wbudowana funkcja VALUE zwraca wartość danego obiektu. Alias jest również niezbędny przy modyfikacji obiektów w tabeli obiektów. 16

Obiektowość w Oracle SELECT * FROM osoby o WHERE o.imie='jan'; IMIE NAZWISKO --------------- ------------------------------ DANE_ADRESOWE(MIASTO, ULICA, NUMER, KOD) ---------------------------------------------- DATA_UR -------- Jan Kowalski ADRES('Łódź', 'Piotrkowska', '80', '95-100') 2000/01/01 17

Obiektowość w Oracle SELECT VALUE(o) FROM osoby o WHERE o.imie= Jan'; VALUE(O)(IMIE, NAZWISKO, DANE_ADRESOWE(MIASTO, ULICA, NUMER, KOD), DATA_UR) ----------------------------------------- OSOBA('Jan', 'Kowalski', ADRES( 'Łódź', 'Piotrkowska', '80','95-100'), '2000/01/01') 18

Obiektowość w Oracle SELECT nazwisko FROM osoby o WHERE o.imie = ' Jan' NAZWISKO ------------------------------ Kowalski 19

Obiektowość w Oracle Alias jest również niezbędny przy modyfikacji obiektów w tabeli obiektów: UPDATE osoby o SET o = Osoba('Jan, 'Kowalski, Adres('Łódź,'Piotrkowska,'80, '95-999 ), TO_DATE('2000/02/02, yyyy/mm/dd )) WHERE o.nazwisko = ' Kowalski ; 20

Obiektowość w Oracle - Metody Typ obiektowy oprócz atrybutów może zawierać również metody opisujące zachowanie obiektów (procedury) oraz umożliwiające manipulowanie własnościami obiektów funkcje. Gdy dany typ obiektowy jest już utworzony i zachodzi potrzeba jego modyfikacji w celu dodania do niego metod wykorzystuje się polecenie: 21

Obiektowość w Oracle - Metody ALTER TYPE Osoba REPLACE AS OBJECT ( imie VARCHAR2(15), nazwisko VARCHAR2(30), dane_adresowe Adres, data_ur DATE, MEMBER FUNCTION wiek RETURN NUMBER, MEMBER PROCEDURE z_data_ur(n_data DATE), PRAGMA RESTRICT_REFERENCES (wiek, WNDS,RNPS,WNPS), PRAGMA RESTRICT_REFERENCES (z_data_ur, RNPS,WNPS) ); 22

Obiektowość w Oracle - Metody Warto wyjaśnić w tym momencie użycie dyrektywy PRAGMA. Poziom ten jest wykorzystywany w celu określenia, czy dana metoda może być wywołana w poleceniach SQL bez narażania się na niekorzystne skutki uboczne. A oto cztery opcje dostępne w tej dyrektywie: WNDS bez zapisów do bazy danych (ang. Write No Database State) RNDS bez odczytów z bazy danych (ang. Read No Database State) WNPS bez zapisów do pakietów (ang. Write No Package State) WNPS bez odczytów z pakietów (ang. Read No Package State) W powyższym przykładzie funkcja wiek obiecuje, że nie będzie modyfikować żadnych danych w bazie danych oraz odczytywać i modyfikować danych w zmiennych pakietowych. 23

Obiektowość w Oracle - Metody Specyfikacja typu obiektowego zawiera deklaracje metod, więc należy zdefiniować ciało tego typu definiujące te metody: CREATE OR REPLACE TYPE BODY Osoba IS MEMEBER FUNCTION wiek RETURN NUMBER IS BEGIN RETURN ROUND(MONTHS_BETWEEN(SYSDATE,data_ur)/12); END; MEMEBER PROCEDURE z_data_ur(n_data DATE) IS BEGIN SELF.data_ur := n_data; END; END; 24

Obiektowość w Oracle - Metody Odwołanie do metod typu obiektowego następuje podobnie jak odwołanie do atrybutów tego typu. Należy pamiętać o umieszczeniu nawiasów ( ) po odwołaniu do metody bezargumentowej zostało to wprowadzone w celu uniknięcia niejednoznaczności w odwołaniu do atrybutów i metod. SELECT o.imie, o.nazwisko, o.wiek() FROM osoby o WHERE o.wiek() > 30; 25

PODSTAWY BAZ DANYCH 18. Typy danych typu LOB w Oracle (Large OBject) 26

Typy danych typu LOB Typy danych typu LOB (Large OBject) służą do przechowywania dużych obiektów (do 4GB) binarnych lub tekstowych. Wewnętrzna struktura tych danych nie jest dostępna z poziomu SQL. Dostęp do danych typu LOB odbywa się przy pomocy pewnych procedur i funkcji Oracle. Najważniejsze rodzaje typów LOB zaimplementowanych w Oracle to: BLOB CLOB NLOB BFILE - do składowania danych binarnych (np. zdjęć); - do składowania danych tekstowych (znak 1 bajt); - odpowiednik CLOB do przechowywaniu znaków narodowych wybranych dla bazy danych; - do zarządzania danymi binarnymi znajdującymi się poza bazą danych zapisanych jako pliki na dysku (można je tylko odczytać). 27

Typy danych typu LOB Obiekty typu BLOB, CLOB, NLOB uczestniczą w transakcjach i odtwarzaniu bazy danych po awarii. Tych własności nie posiadają obiekty typu BFILE. Atrybuty BLOB, CLOB, NLOB nie zawierają właściwych danych, a jedynie lokalizatory LOB (odnośniki do miejsca, w którym fizycznie zapisana jest zawartość obiektu). Większą część operacji na obiektach typu LOB wykonywane są przez procedury i funkcje pakietu DBMS_LOB. Do pracy z obiektami typu LOB należy posiadać uprawnienie systemowe CREATE ANY DIRECTORY i uprawnienie obiektowe EXECUTE do biblioteki DBMS_LOB. 28

Typy danych typu LOB Dla obiektów typu LOB lokalizatory tworzy się za pomocą odpowiednich funkcji pakietu DBMS_LOB: empty_clob - dla danych typu CLOB; empty_blob - dla danych typu BLOB; bfilename - dla danych typu BFILE. Funkcje empty_clob, empty_blob są funkcjami bezargumentowe. Funkcja bfilename posiada dwa argumenty typu VARCHAR2: nazwę obiektu katalogu oraz nazwę pliku. Obiekt katalogu reprezentuje w bazie danych fizyczny katalog utworzony w systemie plików serwera. 29

Typy danych typu LOB Obiekt ten tworzy się poleceniem: CREATE DIRECTORY identyfikator_katalogu AS katalog ; Zadanie. Należy wstawić plik foto1.jpg zapisany w katalogu F:\foto do tabeli utworzonej poleceniem CREATE TABLE obrazki (id NUMBER(3) Primary Key, obrazek BFILE); Należy stworzyć obiekt katalogu: CREATE DIRECTORY obrazki AS F:\foto ; a następnie wykonać polecenie: INSERT INTO obrazki VALUES (1, bfilename( obrazki, foto1.jpg )); Na pliku foto1.jpg można wykonywać operacje odczytu i zapisu. 30

Typy danych typu LOB Obiekty typu BLOB i CLOB nie zawierają żadnych danych. Trzeba je do nich załadować. Zadanie. Mamy tabelę utworzoną poleceniem: CREATE TABLE pracownicy ( id NUMBER(3) PRIMARY KEY, nazwisko VARCHAR2(20), zdjecie BLOB ); Do tej tabeli chcemy wstawić nowy wiersz zawierający zdjęcie pochodzące z pliku jan_kowalski.jpg znajdującego się w katalogu F:\foto. Na początku należy utworzyć obiekt katalogu: CREATE DIRECTORY zdjecia AS F:\foto ; 31

Typy danych typu LOB Następnie należy uruchomić następujący skrypt napisany w PL/SQL wykorzystujący bibliotekę DBMS_LOB. DECLARE bl BLOB; bf BFILE; BEGIN INSERT INTO pracownicy VALUES (1, Kowalski Jan, empty_blob()); SELECT zdjecie INTO bl FROM pracownicy WHERE id=1; bf:=bfilename( zdjecia, jan_kowalski.jpg ); DBMS_LOB.loadfromfile(bl,bf,DBMS_LOB.lobmaxsize); END; Zapytanie SELECT * FROM pracownicy; nie powiedzie się, ponieważ danych binarnych nie można wyświetlić w oknie SQL*Plus. 32

Typy danych typu LOB Zadanie. Do tabeli utworzonej poleceniem CREATE TABLE dokumenty ( id NUMBER(3) PRIMARY KEY, dokument CLOB ); można wstawić dowolny wiersz poleceniem INSERT INTO dokumenty VALUES (1, To jest jakiś CLOB ); Do tabeli dokumenty można wykonać polecenie: SELECT * FROM dokumenty; 33