w5 - Aragorn
Transkrypt
w5 - Aragorn
Nowe typy danych definiowane przez użytkownika typy obiektowe: OBJECT - odpowiadają typowi ROW w standardzie. typy kolekcji: BAZY DANYCH W APLIKACJACH SIECIOWYCH VARRAY - który odpowiada typowi ARRAY w standardzie TABLE - który częściowo odpowiada typowi ARRAY a częściowo wychodzi poza Standard, ponieważ umożliwia definiowanie tabeli zagnieżdżonej, której nie ma w standardzie. Wykład 5 Kolekcje. (Wybrane materiały) Dr inż. E. Busłowska Copyright © 2014-2015 E. Busłowska 1 Skladniki typów obiektowych 3 CREATE [OR REPLACE] TYPE nazwa_typu AS OBJECT ( nazwa_atrybutu typ_danych [,nazwa_atrybutu typ_danych] ... [ {MAP | ORDER} MEMBER specyfikacja funkcji] | [ MEMBER specyfikacja funkcji] [, [ MEMBER specyfikacja funkcji] ... ] ); gdzie: OR REPLACE – jeśli typ obiektowy o podanej nazwie już istnieje w bazie, to zostanie nadpisany. MEMBER – umożliwia podanie specyfikacji metody zdefiniowanej w części ciała. MAP – oznacza metodę jako metodę odwzorowującą. ORDER – oznacza metodę jako metodę porządkującą. Copyright © 2014-2015 E. Busłowska 4 Definicja ciała typu obiektowego Definicja specyfikacji typu SQL> CREATE OR REPLACE TYPE Dzialka AS OBJECT ( x NUMBER(5), y NUMBER(5), MEMBER FUNCTION pole RETURN NUMBER); / Copyright © 2014-2015 E. Busłowska 2 Definicja specyfikacji typu Każdy typ obiektowy może posiadać trzy rodzaje elementów: Nazwa - pozwala odróżnić dany obiekt od innych w ramach danego schematu, Atrybuty - Opisuja strukture oraz cechy obiektu, składają się z nazwy oraz typu danych. Typem danych może być typ SQL (z pewnymi wyjątkami) lub inny typ obiektowy. Na poszczególnych atrybutach można przeprowadzać operacje, chociaż powinno się korzystać z przeznaczonych do tego celu metod typu obiektowego. Dostęp do obiektów uzyskuje się poprzez wyrażenie obiekt.atrybut, Metody - mogą to być funkcje lub procedury, poprzez które wykonuje się operacje na obiekcie, w tym konstruktor obiektu – zdefiniowana przez system funkcja tworząca obiekt danego typu. Copyright © 2014-2015 E. Busłowska Copyright © 2014-2015 E. Busłowska 5 CREATE [OR REPLACE] TYPE BODY nazwa_typu AS MEMBER cialo_podprogramu [, MEMBER cialo_podprogramu ] ... [ {MAP | ORDER} MEMBER cialo_podprogramu ] END; W SQL*PLUS definiowanie części specyfikacji, jak i ciała typu obiektowego musi być zakończone znakiem "/". Copyright © 2014-2015 E. Busłowska 6 1 Definicja ciała typu obiektowego Usuwanie typów SQL> CREATE OR REPLACE TYPE BODY Dzialka AS 2 MEMBER FUNCTION pole RETURN NUMBER IS 3 BEGIN 4 RETURN x*y; 5 END; 6 END; 7/ Copyright © 2014-2015 E. Busłowska 7 Tworzenie tabel obiektowo -relacyjnych 8 Dodawanie danych Tworzenie tabeli zawierającej zdefiniowany typ: CREATE TABLE studenci OF student; 9 Tabele złożone Copyright © 2014-2015 E. Busłowska 10 Dodawanie danych Tabele zawierające pola będące obiektami zdefiniowanych typów obiektowych. CREATE TYPE ulica AS OBJECT ( nazwa_ul VARCHAR2(30), numer NUMBER ); CREATE TABLE adres ( ulica_i_numer ulica, miasto VARCHAR2(30), kod VARCHAR2(8)); Copyright © 2014-2015 E. Busłowska Copyright © 2014-2015 E. Busłowska Tak jak w tabelach relacyjnych: INSERT INTO studenci VALUES (1234567,’Kowalski‘, ‘Jan’, ‘35712-12’ ); Można też dodać do tabeli nowy obiekt zdefiniowanego typu: INSERT INTO studenci VALUES (student ( 1234567,’Kowalski’, ‘Jan‘, ‘357-12-12’ ) ); Można wykorzystać procedurę: DECLARE s student; BEGIN s := student (1234567,’Kowalski’, ‘Jan‘, ‘357-12-12’); INSERT INTO studenci VALUES(s); END; Definicja nowego typu: CREATE TYPE student AS OBJECT ( nr_indeksu NUMBER(7), nazwisko VARCHAR2(30), imie VARCHAR2(10), telefon VARCHAR2(20) ); Copyright © 2014-2015 E. Busłowska Aby usunąć typ należy usunąć zarówno specyfikację, jak i ciało typu. DROP TYPE nazwa_typu [FORCE] oraz DROP TYPE BODY nazwa_typu gdzie: FORCE oznacza usuwanie bez względu na zależności pomiędzy usuwanym typem, a tabelami lub innymi typami. Dane wprowadza się z uwzględnieniem struktury typu pola danego typu obiektowego: INSERT INTO adres VALUES (ulica(‘Wiejska',45A), ‘Białystok',‘15123'); 11 Copyright © 2014-2015 E. Busłowska 12 2 Kolekcje typów Kolekcje Kolekcje - uporządkowane ciągi elementów tego samego typu. Każdy element kolekcji ma jednoznacznie określony wskaźnik określający jego położenie w kolekcji. Kolekcje w języku PL/SQL są pochodnymi tablic w językach programowania. W PL/SQL istnieją dwa rodzaje kolekcji: tablice indeksowane (ang. index-by tables), tablice zagnieżdzone (ang. nested tables), Copyright © 2014-2015 E. Busłowska 13 Tablice zagnieżdżone tworzy sie poleceniem: CREATE [OR REPLACE] TYPE nazwa_typu IS TABLE OF typ_danych [NOT NULL]; gdzie: IS TABLE OF oznacza, ze ma zostać utworzona tablica zagnieżdżona NOT NULL oznacza, ze w kolekcji nie mogą być składowane wartości NULL. 15 Tablice zmiennej długości: zmienna długość zdefiniowany max rozmiar efektywne wykorzystanie przestrzeni bazy danych zbiór uporządkowany zbudowana z obiektów jakiegoś typu używana jeżeli będziemy pobierać jej całą zawartość podczas manipulacji obiektem Copyright © 2014-2015 E. Busłowska 14 Tworzymy typ będący tablicą o zmiennej długości CREATE TYPE email_list_arr AS VARRAY(10) OF VARCHAR2(80); Tworzymy typ będący tablicą osób CREATE TYPE people_typ AS TABLE OF person_typ; Tworzymy tabelę zawierająca zagnieżdżoną tablicę CREATE TABLE department_persons (dept_no NUMBER PRIMARY KEY, dept_name CHAR(20), dept_mgr person_typ DEFAULT person_typ(10,'John Doe',NULL), dept_emps people_typ DEFAULT people_typ() ) NESTED TABLE dept_emps STORE AS dept_emps_tab; Copyright © 2014-2015 E. Busłowska 16 Definicje kolekcji Tworzenie kolekcji Składnia tablicy o zmiennej długości CREATE [OR REPLACE] TYPE {VARRAY|VARYING {VARRAY|VARYING ARRAY} (rozmiar) OF typ_danych Nazwa_Typu IS [NOT NULL]; gdzie: IS VARRAY OF oznacza, ze ma zostać utworzona tablica zmiennej długości, NOT NULL oznacza, ze w kolekcji nie mogą być składowane wartości NULL, typ_danych nie może być BOOLEAN, NCHAR, NCLOB, NVARCHAR2, ani typem obiektowym zawierającym atrybut TABLE lub VARRAY, ani typem REF CURSOR, TABLE lub VARRAY. Możemy korzystać z %type i %rowtype. Copyright © 2014-2015 E. Busłowska brak max rozmiaru zbiór nieuporządkowany używana jeżeli chcemy wyciągać pojedyncze elementy z tablicy Zagnieżdżona tabela - przykład Definiowanie typów kolekcji Copyright © 2014-2015 E. Busłowska Tablice zagnieżdżone 17 definicja typu obiektowego o nazwie Projekt. CREATE TYPE Zlecenia AS OBJECT ( IdZlecenia NUMBER(3), Zlecajacy VARCHAR2(50), Koszt NUMBER(7,2) ); Definicja typu kolekcji tablicy VARRAY Zleceń CREATE TYPE Lista AS VARRAY(3) OF Zlecenia; Definicja tabeli, w której jeden z atrybutów o nazwie Zlecenie jest typu tablicowego Lista. CREATE TABLE KomorkaReal ( IdKomorki NUMBER(3), Nazwa VARCHAR2(15), Zasoby NUMBER(6,2), Zlecenie Lista ); Copyright © 2014-2015 E. Busłowska 18 3 Wstawianie wartości Metody kolekcji INSERT INTO KomorkaReal VALUES(1,'Infor',11111, Lista(Zlecenie(1,‘Manager',1000), Zlecenie(2,‘Kadry',500))); Aby ułatwić operowanie na poszczególnych elementach kolekcji każda kolekcja ma wbudowane następujące metody: EXISTS EXISTS (n) zwraca TRUE jeśli element o numerze porządkowym n istnieje. W przeciwnym razie zwraca FALSE. COUNT Zwraca ilość elementów w kolekcji. LIMIT Dla tablic o zmiennej długości zwraca maksymalna ilość elementów, dla tablic zagnieżdżonych zwraca NULL. FIRST oraz LAST Zwracają odpowiednio: najmniejszy oraz największy numer porządkowy. Jeśli kolekcja jest pusta - obie zwracają NULL. SELECT Nazwa, Zlecenie FROM KomorkaReal; Copyright © 2014-2015 E. Busłowska 19 Metody kolekcji 20 Funkcje i operatory PRIOR oraz NEXT PRIOR (n) oraz NEXT (n) zwracają numer porządkowy odpowiednio: poprzedniego oraz następnego elementu względem n. Jeśli n nie posiada poprzednika (następnika), wówczas obie zwracają NULL. EXTEND Umożliwia powiększenie rozmiaru kolekcji. EXTEND bez argumentów dodaje element o wartości NULL do kolekcji, EXTEND (n) dodaje n elementów o wartości NULL, EXTEND (n, i) dodaje n kopii i-tego elementu. Jeżeli kolekcja nie może zawierać wartości NULL, wówczas można korzystać tylko z trzeciej możliwości. TRIM TRIM bez argumentów kasuje ostatni element w kolekcji. TRIM (n) kasuje n elementów licząc od końca listy. DELETE DELETE bez argumentów kasuje wszystkie elementy w kolekcji. DELETE (n) kasuje n-ty element tabeli zagnieżdżonej. DELETE (m, n) kasuje w tabeli zagnieżdżonej wszystkie elementy, których liczby porządkowe znajdują sie w przedziale m..n. Copyright © 2014-2015 E. Busłowska Copyright © 2014-2015 E. Busłowska 21 CAST() Konwertuje typ lub kolekcję typów na inny typ/kolekcję sys_typeid() Metoda zwraca typ obiektu (ostatni w hierarchii dziedziczenia), do którego należy obiekt podany jako parametr wywołania VALUE() Pobiera alias tabeli obiektowej i zwraca instancje obiektu będącego wierszem Copyright © 2014-2015 E. Busłowska 22 4