Multimedialne bazy danych - laboratorium

Podobne dokumenty
Czym jest Oracle Multimedia?

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

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

Od intermedia do Multimedia obsługa danych multime-dialnych w Oracle 10g/11g

PODSTAWY BAZ DANYCH 13. PL/SQL

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Procedury i funkcje składowane

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

Składowanie, przetwarzanie i wyszukiwanie danych multimedialnych w Oracle 11g Marek Wojciechowski

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

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

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

15. Funkcje i procedury składowane PL/SQL

Bazy Danych i Usługi Sieciowe

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

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

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

Technologie baz danych WYKŁAD 7: Wyjątki

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

Bloki anonimowe w PL/SQL

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

Oracle PL/SQL. Paweł Rajba.

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

PL/SQL. Zaawansowane tematy PL/SQL

Hurtownia Świętego Mikołaja projekt bazy danych

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

Bazy danych. dr inż. Arkadiusz Mirakowski

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

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

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

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

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

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

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

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

Tabele wykorzystywane w przykładach

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wykład 05 Bazy danych

Wyzwalacze TWORZENIE WYZWALACZY

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

Wykład 8. SQL praca z tabelami 5

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

Deklarowanie kursora

Wykład 5. SQL praca z tabelami 2

BAZA DANYCH SIECI HOTELI

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

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

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

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

SQL :: Data Definition Language

Wyzwalacze (triggery) Przykład

PL/SQL. Lidia Małkiewicz i Cezary Skubała

Instrukcja instalacji aplikacji PlanSoft.org

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

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

Wykład 6. SQL praca z tabelami 3

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

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

Ćwiczenie 2. Opcja przestrzenna bazy danych

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

Zaawansowane bazy danych i hurtownie danych semestr I

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Oracle PL/SQL. Paweł Rajba.

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

SQL 4 Structured Query Lenguage

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

Bloki anonimowe w PL/SQL

Język SQL, zajęcia nr 1

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków.

Struktura drzewa w MySQL. Michał Tyszczenko

Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie. dr inż. Adam Piórkowski. Jakub Osiadacz Marcin Wróbel

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

1. ELEMENTY JĘZYKA PL/SQL

Pakiety podprogramów Dynamiczny SQL

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

ACESS- zadania z wykorzystaniem poleceń SQL

Instrukcja instalacji aplikacji Plansoft.org

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

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

Bazy danych - Materiały do laboratoriów VIII

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

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

Uprawnienia, role, synonimy

DB2 XML Extender. Opracowane na podstawie dokumentacji IBM XML Extender

Bazy danych wykład szósty Więzy i wyzwalacze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

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

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

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

Paweł Cieśla. Dokumentacja projektu

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

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

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

Podprogramy. Rozdział 11 Procedury i funkcje składowane

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Eksploracja i ochrona danych multimedialnych

Transkrypt:

Multimedialne bazy danych - laboratorium Oracle Multimedia (rozwiązania) Celem ćwiczenia jest zapoznanie się z obiektowymi typami danych Oracle dedykowanymi do obsługi multimediów. Autor ćwiczenia: Marek Wojciechowski 1. Utwórz w swoim schemacie tabelę SOUNDS jako tabelę obiektów typu ORDAudio. CREATE TABLE sounds OF ORDSYS.ORDAudio; Tabela została utworzona. 2. Wstaw do tabeli audio jeden obiekt dźwiękowy zapisany w pliku tada.wav w katalogu na serwerze udostępnionym jako obiekt directory o nazwie MBD_DIR. INSERT INTO sounds VALUES (ORDSYS.ORDAudio.init('file', 'MBD_DIR', 'tada.wav')); Zatwierdzanie zostało ukończone. 3. Napisz program w formie anonimowego bloku PLSQL, który: - odczyta obiekt dźwiękowy do zmiennej w programie identyfikując go poprzez nazwę źródłowego pliku - dokona importu danych binarnych do bazy danych - wyznaczy metadane o dźwięku zapisując je w atrybutach obiektu - dla kontroli poprawności ekstrakcji metadanych wyświetli na konsoli liczbę kanałów - zapisze zmodyfikowany obiekt w bazie danych zastępując dotychczasową jego postać. au ORDSYS.ORDAudio; ctx RAW(4000) := NULL; SELECT value(d) INTO au FROM sounds d WHERE d.getsourcename() = 'tada.wav' FOR UPDATE; au.import(ctx); au.setproperties(ctx,false); -- bez adnotacji w XML DBMS_OUTPUT.put_line('numberOfChannels: ' TO_CHAR(au.getNumberOfChannels())); UPDATE sounds d SET value(d) = au WHERE d.getsourcename() = 'tada.wav'; numberofchannels: 2 Procedura PLSQL została zakończona pomyślnie.

4. Napisz zapytanie SQL odczytujące z tabeli SOUNDS nazwę źródłowego pliku, jego format, częstotliwość próbkowania oraz czas trwania dźwięku. select s.getsourcename() "FILE", s.getformat() FORMAT, s.getsamplingrate() SAMPLING_RATE, s.getaudioduration() DURATION from sounds s; FILE FORMAT SAMPLING_RATE DURATION --------------- --------------- ------------- -------- tada.wav WAVE 22050 5. Utwórz w swoim schemacie tabelę PHOTOS o poniższej strukturze: ID NUMBER(12) PRIMARY KEY PICTURE ORDIMAGE THUMBNAIL ORDIMAGE CREATE TABLE photos ( ID NUMBER(12) PRIMARY KEY, PICTURE ORDIMAGE, THUMBNAIL ORDIMAGE ) Tabela została utworzona. 6. Wstaw do tabeli PHOTOS dwa obrazy zawarte w plikach szklarka.jpg i kebab.jpg dostępne poprzez obiekt directory o nazwie MBD_DIR. Jako miniatury wstaw zainicjalizowane puste obiekty ORDImage. INSERT INTO photos (id, picture, thumbnail) VALUES (1, ORDImage.init('FILE','MBD_DIR','szklarka.jpg'), ORDImage.init()); INSERT INTO photos (id, picture, thumbnail) VALUES (2, ORDImage.init('FILE','MBD_DIR','kebab.jpg'), ORDImage.init()); COMMIT; Zatwierdzanie zostało ukończone.

7. Napisz program w formie anonimowego bloku PLSQL, który dla wszystkich obrazów z tabeli PHOTOS: - wyznaczy podstawowe metadane o formacie obrazu zapisując je w atrybutach obiektu; - utworzy miniaturę obrazu o rozmiarze 32 x 32 piksele zapisując ją w odczytanym, dotychczas pustym obiekcie miniatury (wykorzystując metodę processcopy); - zmieni format miniatury na GIF (wykorzystując metodę process); - zapisze zmodyfikowany obraz i jego miniaturę w bazie danych zastępując dotychczasowe ich postaci. CURSOR p_photos IS SELECT * FROM photos FOR UPDATE; FOR p IN p_photos LOOP p.picture.setproperties(); p.picture.processcopy('fixedscale=32 32', p.thumbnail); p.thumbnail.process('fileformat=giff'); UPDATE photos SET picture = p.picture, thumbnail = p.thumbnail WHERE CURRENT OF p_photos; Procedura PLSQL została zakończona pomyślnie. 8. Napisz zapytanie SQL odczytujące z tabeli PHOTOS wysokości i szerokości w pikselach oryginalnych fotografii i ich miniatur. SELECT p.picture.getwidth() WIDTH, p.picture.getheight() HEIGHT, p.thumbnail.getwidth() THUMB_WIDTH, p.thumbnail.getheight() THUMB_HEIGHT FROM photos p WIDTH HEIGHT THUMB_WIDTH THUMB_HEIGHT ---------- ---------- ----------- ------------ 3072 2304 32 32 3072 2304 32 32

9. Napisz program w formie anonimowego bloku PLSQL, który dla obrazu szklarka.jpg sprawdzi czy zawiera on zagnieżdżone metadane w formacie EXIF (wyświetl na konsoli nazwy wszystkich dostępnych dla obrazu formatów zagnieżdżonych metadanych). image ORDSYS.ORDImage; metad XMLSequenceType; SELECT picture INTO image FROM photos p WHERE p.picture.getsourcename()='szklarka.jpg'; metad := image.getmetadata('all'); -- print the namespace of each metadata document FOR i in 1..metad.count LOOP DBMS_OUTPUT.PUT_LINE(metad(i).getNamespace() ); EXCEPTION WHEN ORDSYS.ORDImageExceptions.NULL_LOCAL_DATA THEN DBMS_OUTPUT.PUT_LINE('source local data is null'); WHEN ORDSYS.ORDImageExceptions.NULL_SOURCE THEN DBMS_OUTPUT.PUT_LINE('source is null'); http:xmlns.oracle.comordmetaordimage http:xmlns.oracle.comordmetaexif Procedura PLSQL została zakończona pomyślnie. 10. Napisz program (anonimowy blok kodu PLSQL) zliczający ile zdjęć zostało wykonanych z użyciem lampy błyskowej. CURSOR p_photos IS SELECT picture FROM photos FOR UPDATE; counter INTEGER := 0; md XMLSequenceType := NULL; FOR p IN p_photos LOOP md := p.picture.getmetadata('exif'); IF md(1).extract('flashfiredtext()').getstringval() = 'Yes' THEN counter := counter + 1; END IF; DBMS_OUTPUT.PUT_LINE('Photos with flash: ' counter); Photos with flash: 1 Procedura PLSQL została zakończona pomyślnie.

11. Sprawdź zapytaniem SQL do tabeli PHOTOS, ile zdjęć zostało wykonanych z użyciem lampy błyskowej. SELECT id, exif.extract('flashfiredtext()') FLASH FROM photos p, TABLE (p.picture.getmetadata('exif')) exif; SELECT count(1) FLASH_COUNT FROM photos p, TABLE (p.picture.getmetadata('exif')) exif where exif.extract('flashfiredtext()').getstringval() = 'Yes'; FLASH_COUNT ----------- 1