Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL 2012-01-20



Podobne dokumenty
Oracle PL/SQL. Paweł Rajba.

Pakiety podprogramów Dynamiczny SQL

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

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

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

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

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

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

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

Bloki anonimowe w PL/SQL

PODSTAWY BAZ DANYCH 13. PL/SQL

Procedury i funkcje składowane

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

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

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 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

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

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

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

PL/SQL. Zaawansowane tematy PL/SQL

Oracle11g: Programowanie w PL/SQL

Zaawansowane bazy danych i hurtownie danych semestr I

15. Funkcje i procedury składowane PL/SQL

Oracle PL/SQL. Paweł Rajba.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

Oracle11g: Wprowadzenie do SQL

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

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Język PL/SQL Pakiety podprogramów

Bloki anonimowe w PL/SQL

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

Obiektowe bazy danych

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów

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

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

Składowane procedury i funkcje

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

Oracle10g: Programowanie w PL/SQL

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

Język SQL, zajęcia nr 1

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

Oracle PL/SQL. Paweł Rajba.

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

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

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

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

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

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

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

Oracle PL/SQL. Paweł Rajba.

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

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Procedury Funkcje Pakiety. Tworzenie procedury

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

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

1. ELEMENTY JĘZYKA PL/SQL

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

BAZA DANYCH SIECI HOTELI

Indeksy. Indeks typu B drzewo

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Paweł Rajba

Wykład 5. SQL praca z tabelami 2

Modelowanie wymiarów

Oracle PL/SQL. Paweł Rajba.

SQL :: Data Definition Language

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

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

Wykład 8. SQL praca z tabelami 5

Obiektowe bazy danych

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Systemowe aspekty baz

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

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

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

Projektowanie systemów baz danych

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Relacyjne bazy danych. Podstawy SQL

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

Tworzenie raportów XML Publisher przy użyciu Data Templates

Zbiór pytań nr 2. 1 Tabela DEPARTMENTS ma następującą strukturę:

Oracle PL/SQL. Paweł Rajba.

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

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

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

Wykład 9. Pakiety w języku PL/SQL

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

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

Systemy GIS Tworzenie zapytań w bazach danych

Hurtownia Świętego Mikołaja projekt bazy danych

Transkrypt:

Plan wykładu BAZY DANYCH II WYKŁAD 9 Dynamiczny SQL, NDS, EXECUTE IMMEDIATE, Pakiet DBMS_SQL, Obiekty w PL/SQL, Tworzenie, wywoływanie, dziedziczenie, etc. dr inż. Agnieszka Bołtuć Dynamiczny SQL Pozwala na uruchamianie instrukcji SQL bez znajomości kolumn i tabel występujących w tych instrukcjach, Statyczny SQL ma swoje zalety takie jak wiedza o dostępności potrzebnych obiektów, poprawnym zdefiniowaniu uprawnień już w czasie kompilowania lub testowania, ponadto statyczny kod SQL można modyfikować pod względem optymalnej wydajności, Dynamiczny SQL Jednak znajomość i używanie dynamicznego SQL jest praktycznie niezbędna, Dzięki niemu można dołączać instrukcje DDL do programów PL/SQL, dysponować kodem który dostosowuje się do zmian w tabelach, a także umożliwia obsługę różnych danych wejściowych użytkownika w programach składowanych, Dynamiczny SQL można używać wybierając język NDS lub pakiet DBMS_SQL, 1

Kiedy używać dynamicznego SQL NDS Wtedy gdy pełna składnia zapytania SQL jest nieznana w czasie wykonywania, Gdy nieznane są polecenia, klauzule zapytania SQL, Gdy nieznane są tabele, kolumny, indeksy, sekwencje, nazwy użytkowników, etc., Gdy chcesz aby kod był bardziej ogólny i elastyczny, NDS (z ang. Native Dynamic SQL) wbudowany dynamiczny język SQL, Narzędzie do uruchamiania dynamicznego kodu SQL, jest szybsze i bardziej efektywne niż pakiet DBMS_SQL, Umożliwia bezpośrednie korzystanie z kolekcji i typów obiektowych, Ma składnię odzwierciedlającą składnię instrukcji statycznych, NDS EXECUTE IMMEDIATE Może pobierać dane do rekordów, czego nie robi pakiet, Obsługuje wszystkie typy danych języka PL/SQL, które można było użyć w statycznych instrukcjach SQL, Bazuje na instrukcji EXECUTE IMMEDIATE, Służy do przetwarzania i wykonywania dynamicznego SQL, przyjmuje ona jeden argument będący łańcuchem znaków (VARCHAR2), Łańcuch znaków to polecenie w języku SQL bez uwzględnienia w nim średnika, Średnik uwzględniamy wówczas gdy łańcuchem znaków jest blok anonimowy, 2

EXECUTE IMMEDIATE EXECUTE IMMEDIATE EXECUTE IMMEDIATE łańcuch_znaków [INTO {zmienna [,zmienna] rekord}] [USING [IN OUT IN OUT] zmienna_wiązana [, [IN OUT IN OUT] zmienna_wiązana] ]; łańcuch_znaków to dynamiczne zapytanie SQL bez średnika lub blok anonimowy ze średnikiem, zmienne, rekord zmienne PL/SQL przechowujące wartości kolumn, rekord przechowuje wybrany wiersz, zmienna_wiązana wartość wyrażenia przekazywana do dynamicznego SQL lub bloku anonimowego, EXECUTE IMMEDIATE INTO używane dla jednowierszowych zapytań, specyfikuje zmienne lub rekord do których zapisane będą wartości ze zwracanych przez zapytanie kolumn, USING używany do ładowania zmiennych wiązanych, tryb domyślny IN, jako zmienne wiązane nie można używać wartości typu BOOLEAN, Metody wykonywania dynamicznego SQL Polecenia DML i DDL bez zmiennych powiązanych Polecenia DML ze znaną listą zmiennych powiązanych, Polecenia DQL. 3

Metoda nr 1 Metoda nr 1 CREATE OR REPLACE PROCEDURE tworz (nazwa_tab VARCHAR2, kolumny VARCHAR2) IS EXECUTE IMMEDIATE CREATE TABLE nazwa_tab ( kolumny ) ; / tworz( employees_new, id NUMBER PRIMARY KEY, nazwa VARCHAR2(20), pensja NUMBER ); CREATE OR REPLACE PROCEDURE tworz (nazwa_tab VARCHAR2, kolumny VARCHAR2) IS v_lan VARCHAR2(100) := CREATE TABLE nazwa_tab ( kolumny ) ; EXECUTE IMMEDIATE v_lan; / tworz( employees_new, id NUMBER PRIMARY KEY, nazwa VARCHAR2(20), pensja NUMBER ); Metoda nr 2 CREATE OR REPLACE PROCEDURE dodaj (nazwa_tab VARCHAR2, p_id NUMBER, p_nazwa VARCHAR2) IS EXECUTE IMMEDIATE INSERT INTO nazwa_tab VALUES (:1,:2) USING p_id, p_nazwa ; Jednowierszowe instrukcje - przykład CREATE FUNCTION pobierz (p_id NUMBER) RETURN departments%rowtype IS v_lan VARCHAR2(200); v_dep departments%rowtype; v_lan:= SELECT * FROM departments WHERE department_id=:p_id ; EXECUTE IMMEDIATE v_lan INTO v_dep USING p_id; RETURN v_dep; 4

Bloki anonimowe - przykład Metoda nr 3 CREATE FUNCTION zwrot RETURN NUMBER IS v_lan VARCHAR2(200):= DECLARE r_emp employees%rowtype; SELECT * INTO r_emp FROM employees WHERE employee_id=100; :zwr :=r_emp.salary*1.2; ; v_zwr NUMBER; EXECUTE IMMEDIATE v_lan USING OUT v_zwr; RETURN v_zwr; NDS działa tylko dla typów bazy danych, korzystając z kolekcji trzeba ja najpierw definiować w bazie, Operacje masowe na kolekcjach mogą być w NDS wykonywane tylko jako zawarte w blokach PL/SQL, DBMS_SQL nie obsługuje typów zdefiniowanych przez użytkownika, Pakiet DBMS_SQL Przykładowe funkcje pakietu Wprowadzony w Oracle 7, Służy do wykonywania dynamicznych zapytań SQL, Bardziej złożony niż NDS, jednak niezbędny w szczególnych przypadkach np. gdy lista SELECT jest nieznana, describe dbms_sql; - lista procedur dostępnych z pakietu DBMS_SQL, OPEN_CURSOR otwiera nowy kursor i zwraca jego ID, DBMS_SQL.OPEN_CURSOR RETURN INTEGER; CLOSE_CURSOR zamyka kursor, EXECUTE wykonuje kursor (podany przez ID) i zwraca liczbę przetworzonych wierszy, DBMS_SQL.EXECUTE ( c IN INTEGER) RETURN INTEGER; 5

Przykładowe funkcje pakietu Przykładowe funkcje pakietu PARSE dokonanie analizy i weryfikacji zapytania SQL, powiązanie z kursorem, przetwarzane jest dowolne zapytanie DML lub DDL, DBMS_SQL.PARSE ( c IN INTEGER, statement IN VARCHAR2, language_flag IN INTEGER); BIND_VARIABLE wiąże podane wartości ze zmiennymi w kursorze, DBMS_SQL.BIND_VARIABLE ( c IN INTEGER, name IN VARCHAR2, value IN <datatype>); FETCH_ROWS pobiera wiersze z kursora o danym ID, DBMS_SQL.FETCH_ROWS ( c IN INTEGER) RETURN INTEGER; Przykładowe funkcje pakietu IS_OPEN sprawdza czy podany kursor jest otwarty, DBMS_SQL.IS_OPEN ( c IN INTEGER) RETURN BOOLEAN; DEFINE_COLUMN definiuje kolumnę która ma być pobrana z kursora, DBMS_SQL.DEFINE_COLUMN ( c IN INTEGER, position IN INTEGER, column IN <datatype>); Przykład 1 usuwanie rekordów CREATE OR REPLACE FUNCTION usuwanie (p_tabela VARCHAR2) RETURN NUMBER IS v_id_kursor INTEGER; v_ile_usun NUMBER; v_id_kursor:=dbms_sql.open_cursor; DBMS_SQL.PARSE(v_id_kursor, DELETE FROM p_tabela, DBMS_SQL.NATIVE); v_ile_usun:=dbms_sql.execute(v_id_kursor); DBMS_SQL.CLOSE_CURSOR(v_id_kursor); RETURN v_ile_usun; 6

Przykład 2 Porównanie NDS i DBMS_SQL CREATE OR REPLACE PROCEDURE dodawanie (p_tabela VARCHAR2, p_id NUMBER, p_nazwa VARCHAR2) IS v_id_kursor INTEGER; v_ile_dod NUMBER; v_id_kursor:=dbms_sql.open_cursor; DBMS_SQL.PARSE(v_id_kursor, INSERT INTO p_tabela VALUES (:c_id, :c_name), DBMS_SQL.NATIVE); DBMS_SQL.BIND_VARIABLE(v_id_kursor, :c_id,p_id); DBMS_SQL.BIND_VARIABLE(v_id_kursor, :c_nazwa,p_nazwa); v_ile_dod:=dbms_sql.execute(v_id_kursor); DBMS_SQL.CLOSE_CURSOR(v_id_kursor); DBMS_OUTPUT.PUT_LINE(v_ile_dod); CREATE PROCEDURE insert_into_table ( table_name VARCHAR2, deptnumber NUMBER, deptname VARCHAR2, location VARCHAR2) IS stmt_str VARCHAR2(200); stmt_str := 'INSERT INTO ' table_name ' values (:deptno, :dname, :loc)'; EXECUTE IMMEDIATE stmt_str USING deptnumber, deptname, location; źródło: dokumentacja Oracle NDS Porównanie NDS i DBMS_SQL Typ obiektowy CREATE PROCEDURE insert_into_table ( table_name VARCHAR2, deptnumber NUMBER, deptname VARCHAR2, location VARCHAR2) IS cur_hdl INTEGER; stmt_str VARCHAR2(200); rows_processed BINARY_INTEGER; stmt_str := 'INSERT INTO ' table_name ' VALUES (:deptno, :dname, :loc)'; cur_hdl := dbms_sql.open_cursor; dbms_sql.parse(cur_hdl, stmt_str, dbms_sql.native); dbms_sql.bind_variable (cur_hdl, ':deptno', deptnumber); dbms_sql.bind_variable (cur_hdl, ':dname', deptname); dbms_sql.bind_variable (cur_hdl, ':loc', location); rows_processed := dbms_sql.execute(cur_hdl); dbms_sql.close_cursor(cur_hdl); DBMS_SQL źródło: dokumentacja Oracle Obsługa programowania obiektowego w PL/SQL została wprowadzona w wersji Oracle 8, Typy obiektowe w PL/SQL przypominają pakiet, mają specyfikację i ciało, 7

Specyfikacja Specyfikacja - przykład Zawiera atrybuty i deklaracje metod, Specyfikacja jest publiczna, CREATE [OR REPLACE] TYPE [schemat.]nazwa [AUTHID {CURRENT_USER DEFINER}] AS OBJECT (atrybut1 typ_danych, [metoda1]); CREATE OR REPLACE TYPE ksiegarnia AS OBJECT ( Id NUMBER, num_dod NUMBER, Cena NUMBER(10,2), Rok_wydania DATE, ); Atrybuty Atrybuty Musza znaleźć się przed metodami, Typem może być dowolny typ danych bazy, PL/SQL lub zdefiniowany w pakiecie; nie można używać tych, które dostępne są w PL/SQL ale nie obsługuje ich baza (np. PLS_INTEGER), Nie można nadawać ogranicznika NOT NULL, Należy zadeklarować przynajmniej jeden atrybut, Brak możliwości nadawania deklaracji domyślnych, Nie można używać %TYPE ani %ROWTYPE do atrybutów typów obiektowych, można do atrybutów obiektów, Atrybut może być typu innego obiektu, to pozwala na tworzenie złożonych typów obiektowych, 8

Metody Metody składowe Funkcje lub procedury zdeklarowane w specyfikacji, [STATIC MEMBER] PROCEDURE specyfikacja; [STATIC MEMBER CONSTRUCTOR] FUNCTION specyfikacja; [MAP ORDER] MEMBER FUNCTION specyfikacja; Można je wywoływać przy użyciu notacji bazującej na pozycjach lub nazwach, Parametry mogą mieć nazwy domyślne (DEFAULT), Można je przeciążać przy użyciu typu i liczby argumentów, Są wywoływane dla samych obiektów a nie typów obiektowych, Metody składowe Metody statyczne CREATE OR REPLACE TYPE obnizka AS OBJECT ( rabat NUMBER(10,4), cena NUMBER(10,2), MEMBER FUNCTION obn RETURN NUMBER); DECLARE v_o OBNIZKA :=obnizka(.1,65.00); v_war NUMBER(10); v_war:=v_o.obn; DBMS_OUTPUT.PUT_LINE(v_war); Są niezależne od egzemplarza obiektu, Do wywołania trzeba użyć typu obiektowego, a nie egemplarza, Szczególnie użyteczne w wersjach przed Oracle 9iR2 do definiowania konstruktorów definiowanych przez użytkownika, 9

Metody statyczne Konstruktory CREATE OR REPLACE TYPE obnizka AS OBJECT ( rabat NUMBER(10,4), cena NUMBER(10,2), STATIC FUNCTION nowa_cena ( p_cena IN NUMBER, p_rabat IN NUMBER DEFAULT.1) RETURN NUMBER); exec DBMS_OUTPUT.PUT_LINE(obnizka.nowa_cena(85)); Od wersji Oracle 9iR2, Służą do przesłonięcia konstruktorów predefiniowanych przez system lub tworzenia dodatkowych konstruktorów, Gdy typ obiektowy i konstruktor mają tę samą nazwę i liczbę atrybutów to nowy konstruktor zastępuje ten zdefiniowany przez system, Konstruktory CREATE OR REPLACE TYPE obnizka AS OBJECT ( rabat NUMBER(10,4), cena NUMBER(10,2), CONSTRUCTOR FUNCTION obnizka ( cena NUMBER) RETURN SELF AS RESULT); Deklarowanie i inicjowanie DECLARE v_p obnizka; v_p.cena:=85; DBMS_OUTPUT.PUT_LINE(v_p.cena); DECLARE v_p obnizka :=obnizka(null,null); v_p.cena:=85; DBMS_OUTPUT.PUT_LINE(v_p.cena); 10

Ciało typów obiektowych Ciało typów obiektowych Zawiera ciała metod typu obiektowego, CREATE [OR REPLACE] TYPE BODY [schemat.]nazwa {IS AS} [STATIC MEMBER] PROCEDURE ciało; [STATIC MEMBER CONSTRUCTOR] FUNCTION ciało; [MAP ORDER] MEMBER FUNCTION ciało; CREATE OR REPLACE TYPE BODY obnizka AS MEMBER FUNCTION obn RETURN NUMBER IS RETURN (cena*(1-rabat)); SELF MAP i ORDER Wskazuje bieżący egzemplarz obiektu, Jest on automatycznie deklarowany jako pierwszy parametr metod składowych (IN funkcje składowe, IN OUT procedury składowe), Używa się go obowiązkowo w konstruktorach definiowanych przez użytkownika, Konieczne również przy przekazywaniu bieżącego obiektu lub referencji do niego jako argumentu do innej procedury lub funkcji, Nie stosuje się w metodach statycznych, Pozwalają na porównanie dwóch obiektów, Mogą służyć do sortowania obiektów w bazie danych, W obiekcie może być tylko jedna metoda MAP lub ORDER, Nie może być obu metod jednocześnie, W przypadku braku ich definicji program zgłosi wyjątek, 11

MAP MAP - przykład Przekształca obiekt na typ umożliwiający sortowanie, Bardziej wydajna niż ORDER, Przyjmuje wyłącznie parametry SELF, a zwraca typ skalarny: DATE, NUMBER, VARCHAR2, CHAR, REAL, Porównaniu obj_1 > obj_2 odpowiada porównanie obj_1.map() > obj_2.map(), CREATE OR REPLACE TYPE rectangle_typ AS OBJECT ( len NUMBER, wid NUMBER, MAP MEMBER FUNCTION area RETURN NUMBER); CREATE OR REPLACE TYPE BODY rectangle_typ AS MAP MEMBER FUNCTION area RETURN NUMBER IS RETURN len * wid; END area; źródło: dokumentacja Oracle ORDER Przyjmuje jeden parametr typu obiektowego, Zwraca wartość typu NUMBER, Odpowiada na pytanie czy dany obiekt jest mniejszy, większy czy równy podanemu, Tak jak MAP jest wołana automatycznie gdy zaistnieje potrzeba porównania obiektów, ORDER - przykład CREATE OR REPLACE TYPE location_typ AS OBJECT (building_no NUMBER, city VARCHAR2(40), ORDER MEMBER FUNCTION match (l location_typ) RETURN INTEGER ); CREATE OR REPLACE TYPE BODY location_typ AS ORDER MEMBER FUNCTION match (l location_typ) RETURN INTEGER IS IF building_no < l.building_no THEN RETURN -1; ELSIF building_no > l.building_no THEN RETURN 1; ELSE RETURN 0; END IF; źródło: dokumentacja Oracle 12

ORDER - przykład Dziedziczenie DECLARE loc location_typ; secloc location_typ; a number; loc location_typ:=location_typ(300, 'San Francisco'); secloc location_typ :=location_typ(200, 'Redwood Shores'); a := loc.match(secloc); DBMS_OUTPUT.PUT_LINE('order (1 is greater, -1 is lesser):' a); Pozwala na przejmowanie przez typ obiektowy atrybutów i metod obiektowego typu nadrzędnego, CREATE OR REPLACE TYPE obnizka AS OBJECT ( rabat NUMBER(10,4), cena NUMBER(10,2), MEMBER FUNCTION obn RETURN NUMBER) ) INSTANTIABLE FINAL; źródło: dokumentacja Oracle Dziedziczenie Dziedziczenie INSTANTIABLE słowo oznacza że można tworzyć obiekty danego typu, NOT INSTANTIABLE gdy chcemy aby służył wyłącznie jako typ nadrzędny, wówczas można dziedziczyć jego atrybuty i metody, domyślnie INSTANTIABLE, FINAL oznacz że typ nie będzie miał typów pochodnych, gdy NOT FINAL można tworzyć typy pochodne, domyślnie FINAL, Typ bazowy tworzymy ze słowami kluczowymi: INSTANTIABLE NOT FINAL; Typ pochodny CREATE OR REPLACE TYPE nowy UNDER typ_bazowy ( ) INSTANTIABLE FINAL; 13

Dziedziczenie Modyfikowanie i usuwanie typów Zastępowanie metod typu bazowego w typie pochodnym OVERRIDING MEMBER PROCEDURE obn Typ bazowy i typy pochodne są w relacji jeden do wielu, typ bazowy może być powiązany z wieloma pochodnymi, zaś pochodny może mieć jeden typ bazowy, ALTER TYPE nazwa COMPILE [SPECIFICATION BODY]; Gdy brak SPECIFICATION lub BODY obie części są kompilowane razem, Wprowadzenie atrybutu: ALTER TYPE nazwa; ADD ATTRIBUTE nazwa_arg typ_danych; Usunięcie atrybutu: ALTER TYPE nazwa; DROP ATTRIBUTE nazwa_arg CASCADE; Modyfikowanie i usuwanie typów Modyfikowanie i usuwanie typów Dodanie metody do specyfikacji: ALTER TYPE nazwa ADD CONSTRUCTOR FUNCTION nazwa (parametry) RETURN SELF AS RESULT CASCADE; Usunięcie metody: ALTER TYPE nazwa DROP CONSTRUCTOR FUNCTION nazwa (parametry) RETURN SELF AS RESULT CASCADE; Usuwanie typów obiektowych: DROP TYPE nazwa; DROP TYPE nazwa FORCE; 14

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 15