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

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

Oracle PL/SQL. Paweł Rajba.

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

Obiektowe bazy danych

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

Bloki anonimowe w PL/SQL

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

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

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Przestrzenne bazy danych Podstawy języka SQL

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

Wykład 5. SQL praca z tabelami 2

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

Relacyjne bazy danych. Podstawy SQL

PODSTAWY BAZ DANYCH 13. PL/SQL

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

SQL (ang. Structured Query Language)

Relacyjne bazy danych. Podstawy SQL

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

20 kwietnia Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład IX. dr inż.

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

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

Wykład 8. SQL praca z tabelami 5

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

Procedury i funkcje składowane

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

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

Język SQL. Rozdział 2. Proste zapytania

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba.

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

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

ACESS- zadania z wykorzystaniem poleceń SQL

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

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

Technologie baz danych WYKŁAD 7: Wyjątki

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

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

SQL 4 Structured Query Lenguage

Wykład 6. SQL praca z tabelami 3

Paweł Rajba

Obiektowe bazy danych

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

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

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

Bazy Danych i Usługi Sieciowe

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

Język SQL, zajęcia nr 1

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

1. Wyzwalacze BD (ang. triggers)

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Bazy danych i usługi sieciowe

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Oracle11g: Wprowadzenie do SQL

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

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

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

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

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

Bloki anonimowe w PL/SQL

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

Język SQL podstawy zapytań

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

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

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

Microsoft SQL Server Podstawy T-SQL

15. Funkcje i procedury składowane PL/SQL

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Wprowadzenie do języka SQL

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

Pakiety podprogramów Dynamiczny SQL

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

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

Wyzwalacze TWORZENIE WYZWALACZY

Autor: Joanna Karwowska

Deklarowanie kursora

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Grupowanie i funkcje agregujące

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

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

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

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Bazy danych. dr inż. Arkadiusz Mirakowski

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

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Systemy GIS Tworzenie zapytań w bazach danych

Bazy danych. Dr inż. Paweł Kasprowski

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

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

Transkrypt:

Rozszerzenie obiektowe w SZBD Oracle Cześć 2. Kolekcje Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Malinowski Nowak Kowalski tablica zagnieżdżona (ang. nested table) (1) (2) (3) (4) (5) ograniczony zakres Kowalski Nowak Malinowski 1 2 Tabela o zmiennym rozmiarze (1) Definiowana jako obiekt schematu lub element programu PL/SQL, przy dostępie z poziomu SQL brak możliwości manipulacji pojedynczymi elementami. Przy deklaracji konieczne określenie maksymalnego rozmiaru, późniejsza zmiana rozmiaru: Składnia deklaracji: CREATE TYPE nazwa IS AS VARRAY(rozmiar_kolekcji) OF typ_elementu; ALTER TYPE nazwa_kolekcji MODIFY LIMIT nowy_rozmiar ; TYPE nazwa IS AS VARRAY(rozmiar_kolekcji) OF typ_elementu; 3 Tabela o zmiennym rozmiarze (2) Zachowuje uporządkowanie elementów. Odwołanie do elementu przez liczbowy indeks, jest strukturą gęstą posiada tyle elementów ile zadeklarowano, elementy bez wartości są puste. Składowanie kolekcji będącej elementem obiektu schematu: rozmiar do ok. 4000B składowanie bezpośrednio w kolumnie, powyżej 4000B składowane jako LOB, możliwe składowanie pierwszych 4000B danych bezpośrednio w kolumnie. 4

Tabela o zmiennym rozmiarze (3) CREATE TYPE Telefony AS VARRAY(10) OF VARCHAR(15); CREATE TABLE znajomi (imie VARCHAR(100), kontakt Telefony); INSERT INTO znajomi VALUES ('Bolek', Telefony('1234567')); INSERT INTO znajomi VALUES ('Lolek', Telefony('1111111', '2222222')); TYPE Telefony IS VARRAY(10) OF VARCHAR(15); moi_znajomi Telefony := Telefony('111111', '222222');... Tabela zagnieżdżona (1) Definiowana jako obiekt schematu lub element programu PL/SQL, w obu przypadkach możliwe operowanie na pojedynczych elementach kolekcji. Brak wskazania maksymalnego rozmiaru. Składnia deklaracji: CREATE TYPE nazwa IS AS TABLE OF typ_elementu; TYPE nazwa IS AS TABLE OF typ_elementu; 5 6 Tabela zagnieżdżona (2) Nie zachowuje uporządkowania elementów. Odwołanie do elementu przez liczbowy indeks, jest strukturą rzadką niezainicjalizowany element nie istnieje, mogą wystąpić przerwy między elementami. Składowanie kolekcji będącej elementem obiektu schematu: w osobnej tabeli schematu (out-line), tabela zawiera identyfikator tabeli nadrzędnej, możliwe wskazanie nazwy tabeli i przestrzeni tabel do składowania kolekcji: NESTED TABLE nazwa_kolekcji STORE AS nazwa_tabeli [(TABLESPACE nazwa_przestrzeni_tabel)] 7 Tabela zagnieżdżona (3) CREATE TYPE Zespol AS TABLE OF Pracownik; CREATE TABLE projekty(nazwa VARCHAR(100), wykonawcy Zespol) NESTED TABLE wykonawcy STORE AS wykonawcy_projektu; INSERT INTO projekty VALUES ('Z1',Zespol(Pracownik('Bolek'), Pracownik('Lolek'))); INSERT INTO projekty VALUES ('Z2',Zespol(Pracownik('Tola'))); TYPE Zespol IS TABLE OF Pracownik; bdanych Zespol := Zespol(Pracownik('Bolek'),Pracownik('Tola'));... 8

Porównanie typów kolekcji własność VARRAY NESTED TABLE maksymalny rozmiar tak nie usuwanie elementów ze środka kolekcji nie tak składowanie w bazie danych in-line/out-line out-line zachowanie fizycznego porządku tak nie manipulowanie na pojedynczych elementach kolekcji w SQL nie tak Zapytania do kolekcji (1) Zagnieżdżenie kolekcji w zbiorze wynikowym: SELECT imie, kontakt FROM znajomi; IMIE KONTAKT --------- -------------------------------------- Bolek TELEFONY('1234567') Lolek TELEFONY('1111111','2222222') SELECT nazwa, wykonawcy FROM projekty; NAZWA WYKONAWCY ------ -------------------------------------------------------------------------- Z1 ZESPOL(PRACOWNIK('Bolek',1000,NULL,NULL),PRACOWNIK('Lolek',1000,NULL,NULL)) Z2 ZESPOL(PRACOWNIK('Tola',1000,NULL,NULL)) 9 10 Zapytania do kolekcji (2) Zapytania do kolekcji (3) Usunięcie zagnieżdżenia klauzula TABLE: SELECT imie, k.* FROM znajomi z, TABLE (z.kontakt) k IMIE COLUMN_VALUE ---------- --------------- Bolek 1234567 Lolek 1111111 Lolek 2222222 SELECT COLUMN_VALUE AS numer FROM TABLE(SELECT kontakt FROM znajomi WHERE imie = 'Lolek'); NUMER --------------- 1111111 2222222 Usunięcie zagnieżdżenia klauzula TABLE(cd): SELECT w.nazwisko FROM projekty, TABLE(wykonawcy) w WHERE nazwa = 'Z1'; NAZWISKO ---------- Bolek Lolek SELECT nazwisko, pensja FROM TABLE(SELECT wykonawcy FROM projekty WHERE nazwa = 'Z2'); NAZWISKO PENSJA ----------- ------ Tola 1000 11 12

Funkcja CAST Przekształca wartość typu wyjściowego do wartości zadanego typu. Przykład dla typu wbudowanego: SELECT CAST(placa_pod AS VARCHAR2(10)) FROM pracownicy; Przykład dla kolekcji: SELECT nazwa AS zespol, CAST(MULTISET(SELECT nazwisko,placa_pod,etat,null FROM pracownicy WHERE id_zesp = z.id_zesp) AS zespol) AS pracownicy FROM zespoly z ORDER BY nazwa; ZESPOL PRACOWNICY ------------------ ---------------------------------------------------------- ADMINISTRACJA ZESPOL(PRACOWNIK('WEGLARZ',1730,'DYREKTOR',NULL), PRACOWNIK('MAREK',410.2,'SEKRETARKA',NULL)) ALGORYTMY ZESPOL(PRACOWNIK('BLAZEWICZ',1350,'PROFESOR',NULL)) BADANIA OPERACYJNE ZESPOL() 13 Operacje zbiorowe na kolekcjach (1) Dostępne tylko dla tabel zagnieżdżonych. CARDINALITY funkcja zwracająca liczbę elementów kolekcji. SELECT nazwa, CARDINALITY(wykonawcy) AS l_wyk FROM projekty; NAZWA L_WYK --------- ----- Z1 2 Z2 1 14 Operacje zbiorowe na kolekcjach (2) Operacje zbiorowe na kolekcjach (3) COLLECT funkcja tworząca wielozbiórz danego zbioru elementów, wymaga użycia funkcji CAST. SELECT CAST(COLLECT(Pracownik(nazwisko)) AS Zespol) AS zesp_10 FROM pracownicy WHERE id_zesp = 10; ZESP_10 ----------------------------------------------------------------------------- ZESPOL(PRACOWNIK('WEGLARZ',1000,NULL,NULL),PRACOWNIK('MAREK',1000,NULL,NULL)) SET tworzy zbiór z kolekcji, zwraca kolekcję po eliminacji duplikatów. Operatory wielozbiorowe: działają na dwóch kolekcjach tego samego typu, zwracają nową kolekcję, dostępne operatory: MULTISET EXCEPT różnica kolekcji, MULTISET INTERSECT część wspólna kolekcji, MULTISET UNION suma kolekcji, możliwe dodanie klauzuli DISTINCT (np., MULTISET EXCEPT DISTINCT), domyślna klauzula ALL. 15 16

Operacje zbiorowe na kolekcjach (4) Operatory zbiorowe (cd): przykład: SELECT nazwisko FROM TABLE( SELECT p1.wykonawcy MULTISET UNION p2.wykonawcy FROM projekty p1, projekty p2 WHERE p1.nazwa = 'Z1' AND p2.nazwa = 'Z2'); NAZWISKO ------------- BOLEK LOLEK TOLA Operacje DML na kolekcji (1) Dla tabeli o zmiennym rozmiarze tylko operacje na całej kolekcji. SELECT kontakt FROM znajomi WHERE imie = 'Bolek'; KONTAKT ------------------------------- TELEFONY('1234567') UPDATE znajomi SET kontakt = Telefony('1234567','3333333') WHERE imie = 'Bolek'; SELECT kontakt FROM znajomi WHERE imie = 'Bolek'; KONTAKT ------------------------------- TELEFONY('1234567','3333333') 17 18 Operacje DML na kolekcji (2) Kolekcje w PL/SQL (1) Dla tabeli zagnieżdżonej możliwość operowania na poszczególnych elementach. SELECT w.* FROM projekty, TABLE(wykonawcy) w WHERE nazwa='z2'; NAZWISKO PENSJA ETAT DATA_UR -------------------- ---------- --------------- -------- Lola 1000 INSERT INTO TABLE(SELECT wykonawcy FROM projekty WHERE nazwa = 'Z2') VALUES (Pracownik('Lola')); DELETE FROM TABLE(SELECT wykonawcy FROM projekty WHERE nazwa = 'Z2') w WHERE w.nazwisko = 'Tola'; UPDATE TABLE(SELECT wykonawcy FROM projekty WHERE nazwa = 'Z2') w SET w.pensja = 2500, w.etat = 'KIEROWNIK' WHERE w.nazwisko = 'Lola'; SELECT w.* FROM projekty, TABLE(wykonawcy) w WHERE nazwa='z2'; NAZWISKO PENSJA ETAT DATA_UR -------------------- ---------- --------------- -------- Lola 2500 KIEROWNIK 19 Dostępne metody kolekcji: metoda EXTEND EXTEND(n) EXTEND(n, i) TRIM TRIM(n) DELETE DELETE(n) DELETE(n, m) NEXT(n) PRIOR(n) EXISTS(n) opis Dodaje do kolekcji n pustych elementów (jeden przy braku n), opcjonalnie wypełnia je wartością i-tego elementu. Usuwa n elementów (jeden przy braku n) od końca kolekcji. Usuwa wszystkie elementy kolekcji (brak n i m), n-ty element, lub elementy od n-tego do m-tego; ustawienie m i n tylko dla tabeli zagnieżdżonej. Zwraca indeks elementu następującego (poprzedzającego) elementu o indeksie n, NULL przy braku elementu. Testuje istnienie elementu o indeksie n, zwraca NULL przy przekroczeniu zakresu. 20

Kolekcje w PL/SQL (2) Dostępne metody kolekcji (cd): FIRST LAST LIMIT COUNT metoda opis Zwraca indeks pierwszego (ostatniego) elementu kolekcji. Zwraca maksymalny zakres kolekcji. Zwraca liczbę elementów kolekcji. 21 21 Kolekcje w PL/SQL (3) Zwracane wyjątki: COLLECTION_IS_NULL przy wywołaniu EXISTS dla pustej kolekcji, SUBSCRIPT_BEYOND_COUNT odwołanie do elementu spoza zakresu w TRIM. 22 Tabela o zmiennym rozmiarze w PL/SQL znajomi Telefony := Telefony(); znajomi.extend; znajomi(1) := 'Bolek 1234567'; znajomi.extend(znajomi.limit - znajomi.count,1); FOR v_i IN 1..znajomi.COUNT LOOP DBMS_OUTPUT.PUT_LINE(znajomi(v_i)); znajomi.trim(4); znajomi(2) := 'Lolek 9876543'; znajomi(5) := 'Tola 0102030'; Tabela zagnieżdżona w PL/SQL bdanych Zespol := Zespol(); v_j NUMBER; bdanych.extend(1); bdanych(1) := NEW Pracownik('Bolek'); bdanych.extend(5,1); bdanych.delete(2,3); FOR v_i IN 1..bdanych.LAST LOOP IF bdanych.exists(v_i) THEN DBMS_OUTPUT.PUT_LINE(bdanych(v_i).nazwisko); END IF; bdanych(4) := NEW Pracownik('Lolek'); bdanych(5) := NEW Pracownik('Tola'); FOR v_i IN 1..znajomi.COUNT LOOP DBMS_OUTPUT.PUT_LINE(znajomi(v_i)); END; 23 v_j := bdanych.first; WHILE (v_j IS NOT NULL) LOOP DBMS_OUTPUT.PUT_LINE(bdanych(v_j).nazwisko); v_j := bdanych.next(v_j); END; 24

Wynik zapytania jako kolekcja Klauzula BULK COLLECT: TYPE tpracownicy IS TABLE OF pracownicy%rowtype; prac tpracownicy; SELECT * BULK COLLECT INTO prac FROM pracownicy; FOR v_i IN 1..prac.COUNT LOOP DBMS_OUTPUT.PUT_LINE(prac(v_i).nazwisko); END; dodatkowa klauzula SAMPLE(n)pozwala ograniczyć wynik do n% liczby rekordów w zbiorze. 25