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