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

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

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

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

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

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

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba.

Bloki anonimowe w PL/SQL

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku

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

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

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

PL/SQL. Zaawansowane tematy PL/SQL

Język SQL, zajęcia nr 1

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)

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

PODSTAWY BAZ DANYCH 13. PL/SQL

Wykład 5. SQL praca z tabelami 2

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

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

Wykład 05 Bazy danych

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Oracle PL/SQL. Paweł Rajba.

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

Bloki anonimowe w PL/SQL

Wprowadzenie do języka PL/SQL. Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL. Zmienne rekordowe.

Obiektowe bazy danych

15. Funkcje i procedury składowane PL/SQL

Oracle PL/SQL. Paweł Rajba.

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

Relacyjne bazy danych. Podstawy SQL

1. ELEMENTY JĘZYKA PL/SQL

Procedury i funkcje składowane

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

SQL 4 Structured Query Lenguage

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Relacyjne bazy danych. Podstawy SQL

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Wykład 8. SQL praca z tabelami 5

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

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

Plan wykładu BAZY DANYCH II WYKŁAD 8. Wyzwalacze. Wyzwalacze

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

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

Bazy danych 6. Klucze obce. P. F. Góra

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

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

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

Indeksy. Indeks typu B drzewo

Hurtownia Świętego Mikołaja projekt 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

Multimedialne bazy danych - laboratorium

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

Język PL/SQL Wprowadzenie

Bazy danych. dr inż. Arkadiusz Mirakowski

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

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

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

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

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

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

Pakiety podprogramów Dynamiczny SQL

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

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

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

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

Oracle11g: Wprowadzenie do SQL

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

ACESS- zadania z wykorzystaniem poleceń SQL

SQL :: Data Definition Language

BAZA DANYCH SIECI HOTELI

SQL (ang. Structured Query Language)

Bazy danych. Dr inż. Paweł Kasprowski

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

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

Bazy Danych i Usługi Sieciowe

Struktura drzewa w MySQL. Michał Tyszczenko

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

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

Deklarowanie kursora

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Tabele wykorzystywane w przykładach

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Systemowe aspekty baz

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

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

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

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

Bazy danych i usługi sieciowe

Bazy danych. dr Radosław Matusik. radmat

Wykład 6. SQL praca z tabelami 3

Bazy danych - Materiały do laboratoriów VIII

Wstęp do programowania 2

Transkrypt:

Plan wykładu Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone BAZY DANYCH II WYKŁAD 5 dr inż. Agnieszka Bołtuć Kolekcje Tablice asocjacyjne Używane w celu gromadzenia danych tego samego typu, Rekordy zarządzają pojedynczymi wierszami, zaś kolekcje wieloma wierszami, Rodzaje kolekcji: Tablice asocjacyjne (tabele indeksowane), Tablice VARRAY, Tabele zagnieżdżone. Są to jednowymiarowe struktury typów danych Oracle lub typów rekordowych, Cechy: Nie wymagają inicjowania oraz konstruktora, Indeksuje się je liczbami, a od wersji 10g także łańcuchami znaków o zmiennej długości, Jako wartości indeksów można używać dowolnych liczb całkowitych ujemnych i dodatnich + zero, Rozmiar tablicy jest dynamiczny. 1

Tablice asocjacyjne Definiowanie tablic asocjacyjnych Tablica składa się z dwóch kolumn: klucza oraz wartości (skalarne lub rekordy) Klucz Wartości 1 Kowalski 2 Jankowski 3 Paczkowski TYPE nazwa_typu IS TABLE OF {typ_elementu zmienna%type tabela.kolumna%type} [NOT NULL] tabela%rowtype INDEX BY [PLS_INTEGER BINARY_INTEGER VARCHAR2(rozmiar)]; PLS_INTEGER, BINARY_INTEGER, VARCHAR2 Wartość skalarna lub rekord identyfikator nazwa_typu; Definiowanie tablic - przykład Definiowanie tablic - przykład TYPE t_nazwiska IS TABLE OF employees.last_name%type INDEX BY PLS_INTEGER; t_nazw t_nazwiska; t_nazw(1):= Smith ; TYPE t_daty IS TABLE OF DATE INDEX BY PLS_INTEGER; t_d t_daty; t_d(3):=sysdate; 2

Metody tablic asocjacyjnych COUNT, DELETE Funkcje i procedury używane podczas korzystania z tablic asocjacyjnych, Sposób użycia: nazwa_tabeli.nazwa_metody[(parametry)] Należą do nich: COUNT, DELETE(n), DELETE(n,m) EXISTS(n), FIRST, LAST, NEXT(n), PRIOR(n), TRIM, TRIM(n) COUNT zwraca liczbę elementów aktualnie zapisanych w tablicy asocjacyjnej, zwracany typ to PLS_INTEGER, DELETE jest to procedura, służy do usuwania elementów z kolekcji w zależności od wersji są to: DELETE wszystkie elementy, DELETE(n) element o indeksie n, DELETE(n,m) elementy pomiędzy indeksami, EXISTS, LAST, FIRST, NEXT PRIOR, TRIM EXISTS(n) określa czy element o indeksie n znajduje się w kolekcji, zwraca wartość TRUE lub FALSE, FIRST zwraca najniższy indeks kolekcji, LAST - zwraca najwyższy indeks kolekcji, NEXT(n) zwraca indeks kolejny po n-tym, jeśli brak wyższego indeksu zwraca NULL, PRIOR(n) - zwraca indeks poprzedni w stosunku do n-tego, jeśli brak takiego indeksu zwraca NULL, TRIM usuwa z kolekcji element o najwyższym indeksie, jest to procedura, TRIM(n) usuwa n elementów z kolekcji, n musi być mniejsze niż zwracane przez funkcję COUNT, 3

Tablice asocjacyjne z rekordami Tablice asocjacyjne z rekordami TYPE t_pracownicy IS TABLE OF employees%rowtype INDEX BY PLS_INTEGER; t_prac t_pracownicy; SELECT * INTO t_prac(1) FROM employees WHERE employees_id=105; DBMS_OUTPUT.PUT_LINE(t_prac(1).last_name t_prac(1).salary t_prac(1).hire_date); FOR i IN 1..100 LOOP SELECT * INTO t_prac(i) FROM employees WHERE employees_id=i; FOR i IN t_prac.first.. t_prac.last LOOP DBMS_OUTPUT.PUT_LINE(t_prac(i).last_name t_prac(i).salary t_prac(i).hire_date); Przykłady użycia innych metod Tabele VARRAY DBMS_OUTPUT.PUT_LINE( liczba pracowników t_prac.count); IF t_prac.count <>0 THEN DBMS_OUTPUT.PUT_LINE(t_prac(1)); END IF; IF t_prac.exists(1) THEN DBMS_OUTPUT.PUT_LINE(t_prac(1)); END IF; Podobne do tablic asocjacyjnych jednak o stałym rozmiarze, Jednowymiarowe struktury typów danych Oracle, rekordowych lub zdefiniowanych przez użytkownika, Pojawiły się w Oracle 8, Można używać jako struktur programów PL/SQL oraz jako typów obiektowych oraz typów danych kolumn w tabelach, 4

Tabele VARRAY - definicja Tabele VARRAY - przykład TYPE nazwa_typu IS {VARRAY VARYING ARRAY} (rozmiar) OF typ_elementu [NOT NULL]; identyfikator nazwa_typu; - część deklaracyjna identyfikator:=nazwa_typu(); - część wykonawcza lub identyfikator nazwa_typu:=nazwa_typu(); - część deklaracyjna TYPE t_liczby IS VARRAY(3) OF INTEGER; t_l t_liczby:= t_liczby (NULL,NULL,NULL); t_l(1):=10; inicjowanie tabeli w części deklaracyjnej za pomocą wartości NULL t_l(2):=11; t_l(3):=12; DBMS_OUTPUT.PUT_LINE(t_l(i)); Tabele VARRAY - przykład Tabele VARRAY - przykład TYPE t_liczby IS VARRAY(3) OF INTEGER; t_l t_liczby; t_l:= t_liczby (NULL,NULL,NULL); t_l(1):=10; inicjowanie tabeli w części wykonawczej t_l(2):=11; za pomocą wartości NULL t_l(3):=12; DBMS_OUTPUT.PUT_LINE(t_l(i)); TYPE t_liczby IS VARRAY(3) OF INTEGER; t_l t_liczby:= t_liczby (); t_l.ext t_l(i):=9+i; DBMS_OUTPUT.PUT_LINE(t_l(i)); inicjowanie tabeli w części deklaracyjnej bez użycia żadnego wiersza 5

Metoda EXTEND EXTEND przydziela pamięć dla nowych elementów kolekcji przed dodaniem ich wartości, jest to procedura stosowana z tablicami VARRAY oraz tabelami zagnieżdżonymi, EXTEND(n) przydziela pamięć dla n nowych elementów kolekcji, stosuje się jak wyżej, EXTEND(n,i) przydziela pamięć dla n nowych elementów kolekcji, i to indeks elementu, który zostanie powielony na nowych pozycjach. Tabele VARRAY jako typ obiektowy w PL/SQL CREATE OR REPLACE TYPE nazwa_typu AS {VARRAY VARYING ARRAY} (rozmiar) OF typ_elementu [NOT NULL]; Zaletą jest możliwość korzystania z nich w dowolnym programie, podczas gdy dostęp do struktur typu tablicowego w PL/SQL jest ograniczony do jednostek danego programu (bloków anonimowych, procedury, pakietu). Przykład CREATE OR REPLACE TYPE t_liczby AS VARRAY(3) OF INTEGER; / t_l t_liczby:= t_liczby (NULL,NULL,NULL); t_l(1):=10; t_l(2):=11; t_l(3):=12; DBMS_OUTPUT.PUT_LINE(t_l(i)); Definiowanie tablic CREATE OR REPLACE TYPE t_liczby AS VARRAY(3) OF INTEGER; / CREATE TABLE pracownicy (id INTEGER PRIMARY KEY, nazwisko INTEGER NOT NULL,. zarobki t_liczby NOT NULL); 6

Wstawianie do tablic INSERT INTO pracownicy VALUES (10, Kowalski,,t_liczby(1000,200,300)); Pobieranie danych SELECT zarobki FROM pracownicy; WYNIK: t_liczby(1000,200,300) rozwiązanie problemu za pomocą tabel zagnieżdżonych CREATE OR REPLACE TYPE varray_nested_table IS TABLE INTEGER; / SELECT column_value FROM THE (SELECT CAST (zarobki AS varray_nested_table) FROM pracownicy WHERE id=10); WYNIK: COLUMN_VALUE ------------------------- 1000 200 300 - metoda column_value pozwala na dostęp do wierszy tabeli zagnieżdżonej - THE z SQL umożliwia pobranie column_value w zapytaniu kierowanym do tabeli zagnieżdżonej - CAST przekształca tablicę VARRAY w tabelę zagnieżdżoną Modyfikacja tablic Modyfikacja całej zawartości UPDATE pracownicy SET zarobki= t_liczby(2000,200,300) WHERE id=10; Modyfikacja części zawartości (niemożliwe do wykonania za pomocą samego SQL) TYPE pracownicy_typ IS RECORD (id INTEGER, nazwisko INTEGER,. zarobki t_liczby); prac pracownicy_typ; CURSOR pobierz_zarobki (par_id INTEGER) IS SELECT * FROM pracownicy WHERE id=par_id; 7

Tabele zagnieżdżone OPEN pobierz_zarobki(10); FETCH pobierz_zarobki INTO prac; CLOSE pobierz_zarobki; prac.zarobki(1):=2000; UPDATE pracownicy SET zarobki=prac.zarobki WHERE id=10; Jednowymiarowe struktury typów danych Oracle, rekordów lub typów obiektowych zdefiniowanych przez użytkownika, Można ich używać w definicjach tabel, rekordów i obiektów, zaś dostęp do nich uzyskujemy w kodzie SQL i PL/SQL, Można definiować w jednostkach programów PL/SQL, jako typy obiektów oraz typy danych kolumn w tabelach, Rozmiar dynamiczny. Tabele zagnieżdżone - składnia CREATE OR REPLACE TYPE nazwa_typu AS TABLE OF typ_elementu [NOT NULL]; Tabele zagnieżdżone w PL/SQL TYPE t_wyrazy IS TABLE OF VARCHAR(5); t_w t_wyrazy:= t_wyrazy (NULL,NULL,NULL); t_w(1):= aaaa ; t_w(2):= nnnn ; ewentualnie bez inicjowania NULLem z użyciem EXTEND t_w(3):= cccc ; DBMS_OUTPUT.PUT_LINE(t_w(i)); 8

Tabele zagnieżdżone - obiekty CREATE OR REPLACE TYPE t_wyrazy AS TABLE OF VARCHAR(5); / t_w t_wyrazy:= t_wyrazy (NULL,NULL,NULL); t_w(1):=10; t_w(2):=11; t_w(3):=12; DBMS_OUTPUT.PUT_LINE(t_w(i)); Tabele zagnieżdżone typ kolumny CREATE OR REPLACE TYPE t_wyrazy AS TABLE OF VARCHAR2(5); / CREATE TABLE pracownicy (id INTEGER PRIMARY KEY, nazwisko VARCHAR2(20) NOT NULL,. tytuly t_wyrazy NOT NULL) NESTED TABLE tytuly STORE AS nested_tytuly; Tabele zagnieżdżone typ kolumny Wstawianie do tablic INSERT INTO pracownicy VALUES (10, Kowalski,,t_wyrazy( mgr, dr, prof ); Pobieranie danych SELECT tytuly FROM pracownicy; WYNIK: t_wyrazy( mgr, dr, prof ) Tabele zagnieżdżone typ kolumny SELECT column_value FROM THE (SELECT tytuly FROM pracownicy WHERE id=10); WYNIK: COLUMN_VALUE ------------------------- mgr dr prof 9

Tabele zagnieżdżone typ kolumny Modyfikacja, aktualizacja tablic Aktualizacja całej zawartości tabeli zagnieżdżonej UPDATE pracownicy SET tytuly = t_wyrazy( mgr inż., dr, prof ) WHERE id=10; Tabele zagnieżdżone typ kolumny Aktualizacja części zawartości tabeli zagnieżdżonej UPDATE THE (SELECT tytuly FROM pracownicy WHERE id=10) SET column_value= prof. nzw. WHERE column_value= prof ; WYKORZYSTANA LITERATURA J. Price, Oracle Database 11g i SQL. Programowanie. Helion, 2009. S. Urman, R. Hardman, M. McLaughlin, Oracle Database 10g. Programowanie w języku PL/SQL. Helion, 2008. www.oracle.com 10