Distribuirane i objektne baze podataka - Ncd.matf.bg.ac.rs
Distribuirane i objektne baze podataka - Ncd.matf.bg.ac.rs
Distribuirane i objektne baze podataka - Ncd.matf.bg.ac.rs
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>vežbe, školska 2010/11Univerzitet u Beogradu, Matematički fakultetBiljana Stojanović
Objektno-rel<strong>ac</strong>iona podrška u sistemu DB2čas 06
DB2 objektno-rel<strong>ac</strong>iona podrškaDB2 obezbeđuje objektno-rel<strong>ac</strong>ionu podršku kojom se vrši proširenje rel<strong>ac</strong>ionog modela.Podrška za: velike objekte (LOB) korisnički definisane funkcije (user-defined functions, UDF) korisnički definisane tipove (user-defined types, UDT)Varijante UDT-a: UDT distinct tipovi UDT strukturni tipovi Row tipovi <strong>podataka</strong> Array tipovi <strong>podataka</strong> Cu<strong>rs</strong>or tipovi <strong>podataka</strong>Korisnički definisani strukturni tipovi omogućuju trajno smeštanje objekata i uključuju bitnaobjektno-orijentisana svojstva, kao što su: nasleđivanje definisanje ponašanja objekata upotrebom metoda identifikatori objekata upotreba referenci polimorfizam3decembar 2010, Biljana Stojanović
Veliki objekti - LOB Veliki objekti imaju mogućnost smeštanja velike količine<strong>podataka</strong>. Razlikujemo sledeće LOB tipove:CLOB – char<strong>ac</strong>ter large object (za čuvanje veće količine tekstualnih<strong>podataka</strong>, npr. za čuvanje tekstova populanih knjiga ili online pomoći)BLOB – bynary large object (za čuvanje slika ili zvučnih <strong>podataka</strong>)DBCLOB – double-byte charecter large object (slično kao CLOB,samo što za čuvanje <strong>podataka</strong> koriste dvobajtne karakte<strong>rs</strong>ke skupove,čime je omogućeno podrška za čuvanje tekstualnih <strong>podataka</strong> izrazličitih svetskih jezika). Postoje ugrađene funkcije za manipul<strong>ac</strong>iju velikim objektima. DB2 podržava više LOB kolona u okviru jednog reda tabele. Jedan red tabele može da sadrži do 24GB LOB <strong>podataka</strong>. Maksimalna veličina jedne LOB kolone je 2GB. Pod<strong>ac</strong>i LOB tipa su direktno pohranjeni u bazi.4Transakciona obrada, mart 2010
Veliki objekti – LOB (2) CLOB(nc) – niske promenljive dužine do n jedinica c. c može biti: ‘K’ (1024 znaka, 1≤ n ≤ 2.097.152) ‘M’ (1.048.576 znakova, 1 ≤ n ≤ 2048) ‘G’ (1.073.441.824 znaka, n može biti 1 ili 2)što ukupno omogućava 2.147.483.648 znakova DBCLOB – slično kao CLOB samo što se zn<strong>ac</strong>i predstavljajupomoću dva umesto jednog bajta (do 1.073.441.823 znaka) Binarne niske su univerzalni tip <strong>podataka</strong> – bilo koji niz bajtova.Predstavljaju se upotrebom klauzule FOR BIT DATA iza nekogznakovnog tipa, kao i upotrebom tipa BLOB(nc) koji se koristina isti način kao i CLOB(nc).5Transakciona obrada, mart 2010
Veliki objekti – LOB (3)Pod<strong>ac</strong>i LOB tipa mogu biti LOGGED ili NOT LOGGED, tj. može da sepodesi da li promene nad LOB pod<strong>ac</strong>ima treba da budu registrovane. PoštoLOB objekti po definiciji podrazumevaju velike količine <strong>podataka</strong>, može bitikorisno NE LOGOVATI promene nad takvim pod<strong>ac</strong>ima.CREATE TABLE ime_tabele (....audio BLOB(1M) not logged,text CLOB(50K) not logged )Kada se vrši oporavak (recovery), promene nad LOB pod<strong>ac</strong>ima koje nisulogovane neće biti primenjene. Neophodno je ponovo kreirati LOBpodatke koji nisu bili logovani.Razvijena je podrška za upotrebu LOB <strong>podataka</strong> u klijentskim aplik<strong>ac</strong>ijamapreko fajlova ili lokatora (u C-u na primer), pre svega za prenos LOB<strong>podataka</strong> u memoriju.U Javi se ili vrši prenos LOB <strong>podataka</strong> u memoriju ili se pod<strong>ac</strong>i referišu.Oper<strong>ac</strong>ije nad velikim objektima su optimizovane radi poboljšanjaperformansi.6Transakciona obrada, mart 2010
Veliki objekti – LOB (4) Za prihvatanje vrednosti kolone BLOB tipa koristiti tipjava.sql.Blob ili byte[]. Za prihvatanje vrednosti kolone CLOB ili DBCLOB tipakoristiti java.sql.Clob tip. Prilikom ažuriranja vrednosti kolone BLOB tipa koriste sevrednosti tipa java.sql.Blob, odnosno vrednosti tipajava.sql.Clob ako su u pitanju kolone CLOB ili DBCLOBtipa.7decembar 2010, Biljana Stojanović
Distinct tipovi Distinct tipovi su korisnički tipovi koji se baziraju napostojećim ugrađenim tipovima (izvorni tipovi). Interno, distinct tip ima istu reprezent<strong>ac</strong>iju kao i postojećitip nad kojim je definisan, ali se oni smatraju zasebnim inekompatibilnim tipovima. Na primer, distinct tipovi se mogu koristiti zapredstavljanje različitih valuta, kao što su US_Dollar iliCanadian_Dollar. Oba tipa su interno predstaljena kaougrađeni tipovi nad kojima se definišu date valute. Ako seobe valute definišu tipom DECIMAL, u sistemu će bitireprezentovane kao vrednosti tipa decimal.8decembar 2010, Biljana Stojanović
Primer Distinct tip može biti baziran i na jednom od LOB tipovaukoliko se koristi za smeštanje velikih objekata (kao što suaudio ili video zapisi).CREATE DISTINCT TYPE AUDIO AS BLOB (1M) Iako tip AUDIO ima istu reprezent<strong>ac</strong>iju kao BLOB tip, tretirase kao zaseban tip koji nije kompatibilan sa BLOB tipom niti sabilo kojim drugim tipom. Ovo omogućava pisanje funkcija specijalno za dati tip AUDIOčime se obezbeđuje da funkcije ne mogu biti primenjene nabilo koji drugi tip. Restrikcija: Ne mogu svi ugrađeni tipovi da se koriste zadefinisanje distinct tipova. Na primer, BOOLEAN ili XML nemogu da se koriste, kao ni ARRAY, ROW ili CURSOR tipovi.9decembar 2010, Biljana Stojanović
Pogodnosti upotrebe distinct tipovaProširenje (extensibility) - definisanjem novih tipova, može se uvećati skupraspoloživih tipova za podršku aplik<strong>ac</strong>ijamaFleksibilnost (flexibility) - može se definisati ponašanje (semantika) za novitip upotrebom korisničkih funkcija (UDF) kako bi se povećala raznolikosttipova raspoloživih u sistemuKonzistentno ponašanje (consistent behavior) - strogo tipiziranjeobezbeđuje da će se distinct tipovi ponašati na odgovarajući način.Garantuje se da se samo funkcije definisane za taj tip mogu primeniti nadnjegovim instancama.Enkapsul<strong>ac</strong>ija (encapsulation) - skup funkcija i operatora koji se moguprimeniti nad distinct tipom definišu njegovo ponašanje. Ovim jeomogućena fleksibilnost implement<strong>ac</strong>ije, jer pokretanje aplik<strong>ac</strong>ije ne zavisiod interne reprezent<strong>ac</strong>ije distinct tipa.Performanse (performance) - distinct tipovi su visoko integrisani u sistemza upravljanje bazama <strong>podataka</strong>. Zbog interne reprezent<strong>ac</strong>ije koja jeidentična ugrađenim tipovima, distinct tipovi poseduju istu efikasnost upogledu definisanja ugrađenih funkcija, operatora poređenja i indeksa kao iugrađeni tipovi.10decembar 2010, Biljana Stojanović
Stroga tipiziranost u distinct tipovimaJedan od najbitnijih koncepata vezanih za distinct tipove jeste stroga tipiziranost.Stroga tipiziranost garantuje da se jedino funkcije i operatori definisanieksplicitno za distinct tip mogu primeniti nad njegovim instancama.Stroga tipiziranost je bitna jer omogućava da su instance distinct tipa korektne.Na primer, ako se definiše funkcija koja konvertuje američke dolare u kanadskedolare prema tekućem ku<strong>rs</strong>u, ista funkcija ne treba da se koristi za konverzijueura u kanadske dolare jer će se sigurno dobiti pogrešna suma.Kao posledica stroge tipiziranosti, DB2 ne dopušta pisanje upita u kojima seporede, na primer, instance distinct tipa i instance njegovog izvornog tipa. Izistog razloga, DB2 ne dopušta primenu funkcija definisanih za druge tipove nadinstancama distinct tipa.Ako je potrebno porediti instancu distinct tipa sa instancom nekog drugog tipa,neophodno je izvršiti kastovanje instance jednog tipa u drugi tip ili obrnuto.Slično, neophodno je da se instanca distinct tipa kastuje u tip parametra funkcijekoja nije definisana za distinct tip, ukoliko želimo da primenimo tu funkciju nadinstancom distinct tipa.11decembar 2010, Biljana Stojanović
Kreiranje distinct tipaPuna sintaksa naredbe za kreiranje distinct tipa je:CREATE DISTINCT TYPE distinct-type-name ASsource-data-type [WITH COMPARISONS]source-data-typebuilt-in typeanchored typeanchored type:ANCHOR DATA TYPE TO variable-name[table-name.column-name]Uspešnim izvršenjem naredbe generišu se funkcije kastovanja između distinct tipa iizvornog tipa, a opciono se generiše podrška za operatore poređenja (=, , =) za distinct tip.WITH COMPARISONS – generišu se operatori poređenja za poređenje dveinstance distinct tipa. Ne sme da se navodi za LOB, CLOB i DBCLOB tipove, za kojenisu podržani operatori poređenja. Za sve ostale tipove se opciono navodi, mada i uslučaju kada se klauza ne navede, biće generisani operatori poređenja.12decembar 2010, Biljana Stojanović
Kreiranje distinct tipa (2)distinct-type-name: ime distinct tipa (sa ili bez kvalifikatora). Ne sme da bude ime postojećegtipa (ugrađenog ili korisnički definisanog), kao ni BOOLEAN, BINARY iliVARBINARY. Ime ne sme da bude ni ARRAY, INTERVAL ili ROWID. Ne smeju se koristiti ni ključne reči: SOME, ANY, ALL, NOT, AND, OR,BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE, OVERLAPS, SIMILAR,MATCH, kao i operatori poređenja.source-data-type: specifikuje tip koji se koristi kao osnova za internu reprezent<strong>ac</strong>ijudistinct tipa. Tip mora biti ugrađeni tip <strong>podataka</strong>. Ne sme biti XML iliARRAY tip (SQLSTATE 42601). Preporučena imena tipova koje treba koristiti radi prenosivosti aplik<strong>ac</strong>ija: DOUBLE ili REAL umesto FLOAT DECIMAL umesto NUMERIC VARCHAR, BLOB ili CLOB umesto LONG VARCHAR VARGRAPHIC ili DBCLOB umesto LONG VARGRAPHIC13decembar 2010, Biljana Stojanović
Kreiranje distinct tipa (3) anchored-data-type: Identifikuje drugi objekat na osnovu kojeg se definiše distincttip. Važe ista ranije navedena ograničenja i za tip objekta sidra. ANCHOR DATA TYPE TO – tip drugog objekta (sidra) sekoristi za definisanje novog tipa variable-name – identifikuje globalnu promenljivu ugrađenogtipa različitog od ROW ili CURSOR. Tip promenljive se koristikao tip na osnovu kojeg se definiše distinct tip. table-name.column-name: identifikuje ime kolone (atribut) postojeće tabele ili pogleda, pričemu tip atributa mora biti neki ugrađeni tip i na osnovu njegase definiše distinct tip.14decembar 2010, Biljana Stojanović
Generisane funkcije kastovanjaGenerišu se sledeće funkcije kastovanja:jedna funkcija za konverziju distinct tipa u izvorni tip i obrnutojedna funkcija za konverziju tipa INTEGER u distinct tip, ako je izvorni tip SMALLINTjedna funkcija za konverziju tipa VARCHAR u distinct tip, ako je izvorni tip CHARjedna funkcija za konverziju tipa VARGRAPHIC u distinct tip, ako je izvorni tip GRAPHICU opštem slučaju, funkcije imaju sledeći format:CREATE FUNCTION source-type-name (distinct-type-name)RETURNS source-type-name ...CREATE FUNCTION distinct-type-name (source-type-name)RETURNS distinct-type-name ...U slučajevima kada je izvorni tip parametrizovan, funkcija konverzije distinct tipa uizvorni tip ima ime izvornog tipa bez parametara. Tip povratne vrednosti funkcijeuključuje parametre zadate u CREATE TYPE naredbi. Funkcija za konverziju izvornogtipa u distinct tip ima ulazni parametar izvornog tipa uključujući i parametre.15decembar 2010, Biljana Stojanović
Primer 1Naredbe:CREATE TYPE T_SHOESIZE AS CHAR(2)WITH COMPARISONSCREATE TYPE T_MILES AS DOUBLEWITH COMPARISONSgenerišu sledeće funkcije:FUNCTION CHAR ( T_SHOESIZE) RETURNS CHAR(2)FUNCTION T_SHOESIZE ( CHAR (2) )RETURNS T_SHOESIZEFUNCTION DOUBLE (T_MILES) RETURNS DOUBLEFUNCTION T_MILES (DOUBLE) RETURNS T_MILES16decembar 2010, Biljana Stojanović
Tabela funkcija konverzije17decembar 2010, Biljana Stojanović
Tabela funkcija konverzije (2)18decembar 2010, Biljana Stojanović
Funkcije navedene u tabeli su jedine funkcije koje seautomatski generišu prilikom kreiranja distinct tipa. Dakle,ni jedna od ugrađenih funkcija (AVG, MAX, LENGTH itd)nije podržana za distinct tip, sve dok se naredbomCREATE FUNCTION ne izvrši registr<strong>ac</strong>ija ovih funkcijaza distinct tip, pri čemu će te funkcije biti bazirane naodgovarajućim ugrađenim funkcijama. Ove funkcije su osnovne za manipul<strong>ac</strong>iju distinct tipovima uupitima. Već definisani distinct tipovi ne mogu da se koriste kao izvornitipovi za druge distinct tipove, to mogu biti SAMO ugrađenitipovi.19decembar 2010, Biljana Stojanović
Kreiranje tabela sa kolonama distinct tipaNakon kreiranja, distinct tip se može upotrebiti za definisanje kolona unaredbi CREATE TABLE.CREATE DISTINCT TYPE T_EDUC AS SMALLINT WITHCOMPARISONSWITH COMPARISONS mora da se zada jer je izvorni tip SMALLINT.CREATE TABLE EMPLOYEE(EMPNO CHAR(6) NOT NULL,FIRSTNAME VARCHAR(12) NOT NULL,LASTNAMEVARCHAR(15) NOT NULL,WORKDEPTCHAR(3),PHONENOCHAR(4),PHOTO BLOB(10M) NOT NULL,EDLEVELT_EDUC)20decembar 2010, Biljana Stojanović
Primer 2CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9,3) WITH COMPARISONSCREATE DISTINCT TYPE CANADIAN_DOLLAR AS DECIMAL (9,3) WITH COMPARISONSCREATE DISTINCT TYPE EURO AS DECIMAL (9,3) WITH COMPARISONSCREATE TABLE US_SALES(PRODUCT_ITEM INTEGER,MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12),YEAR INTEGER CHECK (YEAR > 1985),TOTALUS_DOLLAR)CREATE TABLE CANADIAN_SALES(PRODUCT_ITEM INTEGER,MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12),YEAR INTEGER CHECK (YEAR > 1985),TOTALCANADIAN_DOLLAR)CREATE TABLE GERMAN_SALES(PRODUCT_ITEM INTEGER,MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12),YEAR INTEGER CHECK (YEAR > 1985),TOTALEURO)21decembar 2010, Biljana Stojanović
Primer 3Može se definisati distinct tip za reprezent<strong>ac</strong>iju konku<strong>rs</strong>nih formulara kandidata u tabelama,kao i za reprezent<strong>ac</strong>iju parametara funkcija.CREATE DISTINCT TYPE PERSONNEL.APPLICATION_FORM AS CLOB(32K)Pošto DB2 ne podržava poređenje nad tipom CLOB, ne može da se zada klauzulaWITHCOMPARISONS. Ime sheme (PERSONNEL) se navodi jer shema treba da sadrži sve distincttipove i sve korisničke funkcije koje se koriste u radu sa formularima.Dalje, može se kreirati tabela u kojoj se čuvaju formulari popunjeni od strane kandidata.CREATE TABLE APPLICATIONS(IDSYSIBM.INTEGER,NAME VARCHAR (30),APPLICATION_DATE SYSIBM.DATE,FORMPERSONNEL.APPLICATION_FORM)Distinct tip je kvalifikovan imenom sheme, jer njegov kvalifikator nije isti kao autoriz<strong>ac</strong>ijski ID.Kad god imena tipova i funkcija nisu kvalifikovana, DB2 pretražuje sheme koje su navedene nalok<strong>ac</strong>iji koja odgovara tekućoj putanji funkcija, tražeći tip ili funkciju koja odgovara datomnekvalifikovanom imenu.Pošto se SYSIBM uvek uzima u obzir (ako se izostavi) u tekućoj putanji, može se za ugrađenetipove izostaviti kvalifik<strong>ac</strong>ija.22decembar 2010, Biljana Stojanović
Primer 4 – kastovanje između distinct tipovaŽelimo da definišemo funkciju koja konvertuje neku valutu u US dolar.Kreira se tabela sa tekućim vrednostima ku<strong>rs</strong>a za konverziju jedne valute u drugu.CREATE TABLE exchange_rates(source CHAR(3), target CHAR(3), rate DECIMAL(9,3))Sledeća funkcija se može iskoristiti za direktni pristup vrednostima tabeleCREATE FUNCTION exchange_rate(src VARCHAR(3), trg VARCHAR(3))RETURNS DECIMAL(9,3)RETURN SELECT rate FROM exchange_ratesWHERE source = src AND target = trgU prethodnoj funkciji vrednost ku<strong>rs</strong>a je tipa DECIMAL, nije distinct tipa. Za predstavljanjerazličitih valuta, mogu se koristiti distinct tipovi:CREATE DISTINCT TYPE CANADIAN_DOLLAR AS DECIMAL (9,3) WITHCOMPARISONSCREATE DISTINCT TYPE EURO AS DECIMAL(9,3) WITH COMPARISONSCREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9,3) WITHCOMPARISONS23decembar 2010, Biljana Stojanović
Primer 4 - nastavak Za definisanje funkcije koja konvertuje kanadski dolar ili euro uUS dolar, moraju da se kastuju vrednosti koje se koriste.CREATE FUNCTION US_DOLLAR_C(amount CANADIAN_DOLLAR)RETURNS US_DOLLARRETURN US_DOLLAR(DECIMAL(amount) *exchange_rate('CAN', 'USD'))CREATE FUNCTION US_DOLLAR_E(amount EURO)RETURNS US_DOLLARRETURN US_DOLLAR(DECIMAL(amount) *exchange_rate('EUR', 'USD'))24decembar 2010, Biljana Stojanović
Poređenja upotrebom distinct tipovaPretpostavimo da želimo da odredimo koji proizvodi su se više prodali u Americi nego uKanadi i Nemačkoj za mesec jul, 2009. godine.SELECT US.PRODUCT_ITEM, US.TOTALFROM US_SALES AS US, CANADIAN_SALES AS CDN,GERMAN_SALES AS GERMANWHERE US.PRODUCT_ITEM = CDN.PRODUCT_ITEMAND US.PRODUCT_ITEM = GERMAN.PRODUCT_ITEMAND US.TOTAL > US_DOLLAR_C (CDN.TOTAL)AND US.TOTAL > US_DOLLAR_E (GERMAN.TOTAL)AND US.MONTH = 7AND US.YEAR = 2009AND CDN.MONTH = 7AND CDN.YEAR = 2009AND GERMAN.MONTH = 7AND GERMAN.YEAR = 2009Pošto ne može da se direktno vrši poređenje US dolara sa kanadskim dolarima ili eurima,koriste se funkcije za kastovanje sume novca iz kanadskih dolara u US dolare i iz eura u USdolare. Ne bi trebalo da se sve sume kastuju u DECIMAL i da se potom porede, zato štosume nisu monetno uporedive, tj. dobijene sume nisu u istoj valuti.25decembar 2010, Biljana Stojanović
Poređenje distinct tipova i konstantiPretpostavimo da želimo da znamo koji proizvodi su se prodali za više od$100 000.00 u Americi za mesec jul, 2009 godine.SELECT PRODUCT_ITEMFROM US_SALESWHERE TOTAL > US_DOLLAR (100000)AND month = 7AND year = 2009Pošto ne mogu direktno da se porede US dolari sa instancama izvornog tipa za USdolare, što je DECIMAL, koristi se funkcija za kastovanje DECIMAL u US dolare.Takođe, može se koristiti i druga funkcija za kastovanje koju obezbeđuje DB2 (USdolari u DECIMAL) za kastovanje kolone TOTAL u DECIMAL.Može se koristiti i not<strong>ac</strong>ija kastovanja umesto poziva funkcije za kastovanje.SELECT PRODUCT_ITEMFROM US_SALESWHERE TOTAL > CAST (100000 AS us_dollar)AND MONTH = 7AND YEAR = 200926decembar 2010, Biljana Stojanović
Dodele vrednosti upotrebom distinct tipovau ugrađenom SQL-ujava.sql.Clob hv_form;...INSERT INTO APPLICATIONSVALUES (134523, 'Peter Holland', CURRENT DATE,:hv_form)Ne mora eksplicitno da se poziva funkcija za kastovanje host promenljive udistinct tip pe<strong>rs</strong>onnal.application_form.27decembar 2010, Biljana Stojanović
Pretpostavimo da su definisane tri funcije nad ugrađenom funkcijom SUMda bi se podržala funkcija SUM za US dolare, kanadske dolare i eure.CREATE FUNCTION SUM (CANADIAN_DOLLAR)RETURNS CANADIAN_DOLLARSOURCE SYSIBM.SUM (DECIMAL())CREATE FUNCTION SUM (US_DOLLAR)RETURNS US_DOLLARSOURCE SYSIBM.SUM (DECIMAL())CREATE FUNCTION SUM (EURO)RETURNS EUROSOURCE SYSIBM.SUM (DECIMAL())28decembar 2010, Biljana Stojanović
Pretpostavimo da je potrebno održavati godišnje ukupne vrednosti prodaje u USdolarima za svaki proizvod u svakom regionu, u posebnim tabelama:CREATE TABLE US_SALES_02(PRODUCT_ITEM INTEGER,TOTALUS_DOLLAR)CREATE TABLE GERMAN_SALES_02(PRODUCT_ITEM INTEGER,TOTALUS_DOLLAR)CREATE TABLE CANADIAN_SALES_02(PRODUCT_ITEM INTEGER,TOTALUS_DOLLAR)INSERT INTO US_SALES_02SELECT PRODUCT_ITEM, SUM (TOTAL)FROM US_SALESWHERE YEAR = 2002GROUP BY PRODUCT_ITEM29decembar 2010, Biljana Stojanović
INSERT INTO GERMAN_SALES_02SELECT PRODUCT_ITEM, US_DOLLAR_E (SUM (TOTAL))FROM GERMAN_SALESWHERE YEAR = 2002GROUP BY PRODUCT_ITEMINSERT INTO CANADIAN_SALES_02SELECT PRODUCT_ITEM, US_DOLLAR_C (SUM (TOTAL))FROM CANADIAN_SALESWHERE YEAR = 2002GROUP BY PRODUCT_ITEMEksplicitno se konvertuje suma u kanadskim dolarima i eurima u US dolare,obzirom da se vrednosti različitih distinct tipova ne mogu direktnododeljivati.Ne može da se koristi sintaksa cast operatora, jer distinct tipovi mogu nataj način jedino da se kastuju u svoje izvorne tipove.30decembar 2010, Biljana Stojanović
Primena UNION operatora na kolonedistinct tipa Pretpostavimo da želimo da kreiramo pogled koji sadrži sveregistrovane prodaje za sve proizvode u kompanijama:CREATE VIEW ALL_SALES ASSELECT PRODUCT_ITEM, MONTH, YEAR, TOTALFROM US_SALESUNIONSELECT PRODUCT_ITEM, MONTH, YEAR,US_DOLLAR_C (TOTAL)FROM CANADIAN_SALESUNIONSELECT PRODUCT_ITEM, MONTH, YEAR,US_DOLLAR_E (TOTAL)FROM GERMAN_SALES Neophodno je kastovanje kanadskih dolara i eura u američkedolare (ili neko drugo kastovanje), jer su distinct tipovi unionkompatibilni jedino sami sa sobom.31decembar 2010, Biljana Stojanović
Definisanje izvornih funkcija za distinct tipovePretpostavimo da imamo definisanu izvornu funkciju nad ugrađenomfunkcijom SUM radi primene funkcije SUM nad eurima:CREATE FUNCTION SUM (EURO)RETURNS EUROSOURCE SYSIBM.SUM (DECIMAL())Želimo da odredimo ukupnu prodaju u Nemačkoj za svaki proizvodza 2002. godinu i to u US dolarima:SELECT PRODUCT_ITEM, US_DOLLAR_E(SUM (TOTAL))FROM GERMAN_SALESWHERE YEAR = 2002GROUP BY PRODUCT_ITEMNe može da se piše SUM (us_dollar_e (total)), osim ako nijedefinisana funkcija SUM za US dolare na sličan način kao za eure.32decembar 2010, Biljana Stojanović
Strukturni tipoviStrukturni tipovi su korisnički tipovi koji sadrže jedan ili više imenovanih atributaodgovarajućeg tipa. Atributi su svojstva koja opisuju instance strukturnog tipa.Na primer, osoba može imati atribute ime, adresa i slično.Strukturni tip uključuje i skup specifik<strong>ac</strong>ija metoda. Metodima se definiše ponašanjeinstanci strukturnog tipa.Slično korisničkim funkcijama (UDF), metodi su rutine koje proširuju SQL.U slučaju metoda, ponašanje je integrisano sa samim tipom.Strukturni tip može da se koristi kao tip tabele, pogleda ili kolone.Tabele i pogledi strukturnog tipa poznati su pod nazivom tipizirane tabele i pogledi(typed table and views). Imena i tipovi atributa strukturnog tipa postaju imena itipovi kolona tipiziranih tabela ili pogleda. Redovi se mogu posmatrati kaoreprezent<strong>ac</strong>ije instanci strukturnog tipa.Strukturni tip može da se koristi i kao tip argumenata neke rutine.Tip se ne može ukloniti ukoliko ga neki drugi objekti koriste, direktno ili indirektno.Na primer, tip ne može da se ukloni ukoliko kolona tabele ili pogleda direktno iliindirektno koristi taj tip.33decembar 2010, Biljana Stojanović
Kreiranje strukturnih tipova34decembar 2010, Biljana Stojanović
type-nameime tipa. Ne sme biti ime već postojećeg tipa (ugrađenog,strukturnog ili distinct tipa). UNDER supertype-namenavodi se ime nadtipa. Tip koji se definiše će sadržati sve atributenadtipa praćene dodatnim atributima iz attribute-definition sekcije. attribute-definition:definicija atributa strukturnog tipa. Ime atributa mora da se razlikujeod imena ostalih atributa, kao i od imena atributa nadtipa.Tip atributa može biti bilo koji ugrađeni tip. Ne može biti XML. Akoje tip atributa referentni tip, ciljni tip mora biti postojeći strukturnitip ili onaj koji se kreira ovom naredbom. Strukturni tip ne može da se definiše tako da neki od njegovihatributa bude istog tipa ili nekog od podtipova.35decembar 2010, Biljana Stojanović
INSTANTIABLE /NOT INSTANTIABLE – može/ne može se kreirati instancastrukturnog tipa.NOT INSTANTIABLE ne generiše se konstruktor za ovakav tip strukturni tip ne može biti tip tabele ili pogleda može se koristiti kao tip kolona tabele (u kolonu se mogu uneti samo null vrednostiili instance INSTANTIABLE podtipa)Da bi se kreirale instance NOT INSTANTIABLE strukturnog tipa, moraju se kreiratiINSTANTIABLE podtipivi.INLINE LENGTH integer maksimalna veličina (u bajtovima) instance kolone strukturnog tipa za smeštanjezajedno sa ostalim vrednostima u redu tabele. Instance strukturnog tipa ili njegovog podtipa koje su veće od zadate vrednosti,smeštaju se odvojeno od reda tabele (slično kao LOB vrednosti). Ako je navedena INLINE_LENGTH vrednost manja od veličine rezultatakonstruktora novokreiranog tipa i manja od 292 bajta, generiše se greška. INLINE LENGTH vrednost za strukturni tip (podrazumevana ili zadata) je zapravovrednost podrazumevane veličine kolona strukturnog tipa. To se može promenitiprilikom kreiranja tabele. Podrazumevana vrednost za INLINE LENGTH se određuje od strane sistema.36decembar 2010, Biljana Stojanović
WITHOUT COMPARISONSNe generišu se funkcije poređenja za instance strukturnog tipaNOT FINALStrukturni tip može da se koristi kao nadtipMODE DB2SQLNeophodna klauza kojom se omogućava direktan poziv konstruktora zadati tipWITH FUNCTION ACCESSSvim metodima ovog tipa i njegovih podtipova uključujući i metode kojiće kasnije biti kreirani, može se pristupiti pomoću funkcijske not<strong>ac</strong>ije.Ova opcija se može zadati samo za koreni strukturni tip u hijerarhijitipova (tj. ako opcija UNDER nije zadata).37decembar 2010, Biljana Stojanović
Svakom novokreiranom strukturnom tipu DB2 automatski pridružuje propratni tipkoji se zove referentni tip. Za strukturni tip se u tada kaže da je referisani tip.Referentni tipovi se mogu koristiti u SQL naredbama na isti način kao i drugikorisnički definisani tipovi.REF USING rep-typeDefiniše ugrađeni tip koji se koristi kao reprezent<strong>ac</strong>ija za referentni tip datogstrukturnog tipa i svih njegovih podtipova. Može se zadati samo za koreni tip uhijerarhiji.Rep-type ne može biti REAL, FLOAT, DECFLOAT, BLOB, CLOB, DBCLOB,nizovski tip, strukturni tip i mora imadi veličinu manju ili jednaku 32 672 bajta.Ako ova klauza nije navedena za koreni tip hijerarhije, podrazumeva se REFUSING VARCHAR(16) FOR BIT DATA38decembar 2010, Biljana Stojanović
CAST (SOURCE AS REF) WITH funcname1Definiše ime funkcije generisane od strane sistema koja kastuje tip rep-type ureferentni tip strukturnog tipa. Ako se ne navede klauza, podrazumevanavrednost za funcname1 je type-name, tj. ime strukturnog tipa.CAST (REF AS SOURCE) WITH funcname2Definiše ime funkcije generisane od strane sistema koja kastuje vrednostreferentnog tipa za dati strukturni tip u tip rep-type. Ako se ne navede klauza,podrazumevana vrednost za funcname2 je rep-type, tj. ime reprezent<strong>ac</strong>ionog tipa.39decembar 2010, Biljana Stojanović
Kreiranje strukturnih tipova (2)40decembar 2010, Biljana Stojanović
method-specification Definiše metode za ovaj tip. Metod ne može da se koristi ako ne postoji naredba CREATE METHOD.OVERRIDING Metod koji se definiše preklapa metod iz nadtipa. Nije primenljivo na sve metode. Metod koji se definiše i originalni metod moraju imati isto ime, isti broj i tipove parametara.method-name Može se koristiti isto ime za više metoda, sve dok se njihovi prototipovi razlikujuparameter-name Ime parametra. Ne može biti SELF, što je ime implicitnog parametra metoda. Ako je u pitanju SQLmetod, svi parametri moraju biti imenovani. Ako metod preklapa metod iz nadtipa, ime parametra morabiti isto kao i u preklopljenom metodu.data-type2 Tip parametra metodaNapomena:Ne postoji podrazumevano mapiranje strukturnog tipa u tip matičnog jezika koji se koristi zapisanje aplik<strong>ac</strong>ije. Mora da se definiše funkcija koja će vršiti mapiranje.AS LOCATOR Za LOB tipove ili distinct tipove bazirane na LOB tipovima. Metodu će se proslediti LOB lokatorumesto odgovarajuće vrednosti, čime se štedi na broju bajtova koji se prosleđuju metodu, pogotovokada je samo nekoliko bajtova vrednosti zapravo bitno za metod.41decembar 2010, Biljana Stojanović
RETURNS - obavezna klauza, kojom se opisuje rezultat metoda.data-type3 - tip rezultata metoda. Važe ista razmatranja kao i za tip data-type2. Ako metod preklapa drugi metod, data-type3 mora da bude podtip tipa povratne vrednostioriginalnog metoda ukoliko se radi o strukturnom tipu; u suprotnom, tipovi moraju bitiidentični.data-type4 cast from data-type5 - tip rezultata metoda. Ova klauza se koristi za vraćanje drugačijeg tipa <strong>podataka</strong> pozivajućoj naredbi u odnosu natip <strong>podataka</strong> koji vraća metod. Tip 5 mora da ima mogućnost kastovanja u tip 4. Pošto se veličina i preciznost tipa 4 nasleđuju iz tipa 5, nije neophodno navoditi eksplicitnevrednosti. Umesto toga, može se pisati npr. VARCHAR(). FLOAT() ne može da se koristi. Distinct tip ne može da se koristi za tip 5. Ako metod preklapa drugi metod, ova klauza ne može da se navede. Slično, klauza FOR BIT DATA ne može da se navede.SPECIFIC specific-name Zadaje se jedinstveno ime instanci metoda koji se definiše. Ovo ime može se koristiti kadase definiše telo metoda ili prilikom uklanjanja metoda. Ne može se koristiti za pozivmetoda. Ako se ne navede, generiše se automatsko ime u odgovarajućem formatu.SELF AS RESULT Identifikuje se metod kao metod sa održivim tipom.42decembar 2010, Biljana Stojanović
Kreiranje strukturnih tipova (3)43decembar 2010, Biljana Stojanović
SQL-routine-char<strong>ac</strong>teristicsZadaju se karakteristike metoda koje će biti definisane upotrebom naredbe CREATEMETHOD.LANGUAGE SQL metod je napisan na SQL-u sa jednom RETURN naredbom.PARAMETER CCSID Kodna strana koja se koristi za sve ulazne i izlazne znakovne parametre metoda.DETERMINISTIC Metod uvek vraća isti rezultat za iste ulazne podatke u uspešnim pozivima.NOT DETERMINISTICEXTERNAL ACTION ili NO EXTERNAL ACTIONREADS SQL DATA ili CONTAINS SQL Koji tip SQL naredbi može da se izvrši u okviru metoda.CALLED ON NULL INPUTINHERIT SPECIAL REGISTERS Specijalni registri promenljivog sadržaja u metodu nasleđuju svoje inicijalne vrednosti izokruženja pozivajuće naredbe. Za metod koji se poziva u okviru select naredbe ku<strong>rs</strong>ora,inicijalne vrednosti se nasleđuju iz okruženja u kome je ku<strong>rs</strong>or otvoren. Za metod koji se poziva u ugnježdenom objektu (kao što je triger ili pogled), inicijalnevrednosti se nasleđuju iz izvršnog okruženja (ne iz definicije objekta).44decembar 2010, Biljana Stojanović
external-routine-char<strong>ac</strong>teristicsLANGUAGE – obavezna klauzaPARAMETER STYLEPARAMETER CCSIDDETERMINISTIC ili NOT DETERMINISTICFENCED ili NOT FENCEDTHREADSAFE ili NOT THREADSAFERETURNS NULL ON NULL INPUT ili CALLED ON NULL INPUTNO SQL, CONTAINS SQL, READS SQL DATAEXTERNAL ACTION ili NO EXTERNAL ACTIONNO SCRATCHPAD ili SCRATCHPAD lengthPreporučuje se da metodi budu re-entrant, tako da scratchpad zapravo znači da se „čuvastanje“ iz jednog poziva u drugi. (scratchpad – beležnica)Ako je navedeno SCRATCHPAD, pri prvom pozivu metoda, alocira se memorija zascretchpad koji će biti korišćen od strane metoda.Podrazumevana veličina je 100 bajtova.Inicijallizuje se na sve null karaktere.Opseg je SQL naredba. Postoji jedan scratchpad po jednoj referenci eksternog metoda uSQL naredbi.45decembar 2010, Biljana Stojanović
Dakle, ako je metod X definisan sa ovom opcijom, generisaće se tri scratchpad-anakon select naredbe:SELECT A, X..(A) FROM TABLEBWHERE X..(A) > 103 OR X..(A) < 19Ako je navedena klauza ALLOW PARALLEL, opseg je drugačiji.Ako se metod izvršava na više particija <strong>baze</strong>, scratchpad će biti dodeljen na svakojparticiji gde se metod izvršava za svako referisanje metoda u SQL naredbi.Scratchpad je trajan, tj. njegov sadržaj se čuva između poziva metoda. Sve promenekoje načini jedan poziv metoda, biće prisutne u narednom pozivu.NO FINAL CALL ili FINAL CALLZavršni poziv za eksterni metod ili ne. Oslobađaju se zauzeti sistemski resu<strong>rs</strong>i.Ako je navedena klauza FINAL CALL, dodatni argument se prosleđuje metodu kojim sespecifikuje tip poziva.Tip poziva može biti: Normalni poziv Prvi poziv Poslednji (završni) poziv46decembar 2010, Biljana Stojanović
Prvi poziv – prvi poziv eksternog metoda za datukonkretnu referencu metoda u datoj SQL naredbi. To jenormalni poziv. Poslednji poziv – nije normalni poziv. Javlja se u sledećimsitu<strong>ac</strong>ijama: Kraj naredbe - kada je ku<strong>rs</strong>or zatvoren (za naredbe kojekoriste ku<strong>rs</strong>ore) ili kada je naredba izvršena Kraj transakcije – kada se ne javlja normalni završetak naredbe. Ako se izvši naredba commit dok je ku<strong>rs</strong>or sa opcijomWITH HOLD otvoren, poslednji poziv se vrši kada seku<strong>rs</strong>or zatvara ili na kraju aplik<strong>ac</strong>ije.47decembar 2010, Biljana Stojanović
ALLOW PARALLEL ili DISALLOW PARALLELda li da za jednu referencu metoda, poziv metoda treba da bude paralelizovan. Uopštem slučaju, izvršenje većine skalarnih metoda treba da bude paralelizovano.Treba razmotriti sledeće:Da li se svi pozivi metoda završavaju nezavisno jedni od drugih? Ako je odgovorda, navesti ALLOW PARALLELDa li svaki poziv metoda ažurira scratchpad, obezbeđujući vrednosti koje su odinteresa narednom pozivu. Ako je odgovor da, navesti DISALLOW PARALLEL iliprihvatiti podrazumevanu opciju.Da li postoji neka eksterna akcija metoda koja se reflektuje samo na jednuparticiju <strong>baze</strong>? Ako je odgovor da, navesti DISALLOW PARALLEL ili prihvatitipodrazumevanu opciju.Da li se koristi scratchpad, ali samo da bi se neke skupe inicijaliz<strong>ac</strong>ione radnjeobavile minimalan broj puta? Ako je odgovor da, navesti ALLOW PARALLEL.Podrazumevana vrednost je ALLOW PARALLEL, osim ako je navedena nekaod klauzula: NOT DETERMINISTIC, EXTERNAL ACTION, SCRATCHPADili FINAL CALL.48decembar 2010, Biljana Stojanović
Primer 1Kreirati tip za odsek (department)CREATE TYPE DEPT AS( DEPT_NAME VARCHAR(20),MAX_EMPS INT)REF USING INTMODE DB2SQLKreirati hijerarhiju tipova koja se sastoji od tipa za zaposlene i podtipa za menadžere.CREATE TYPE EMP AS(NAMEVARCHAR(32),SERIALNUM INT,DEPTREF(DEPT),SALARY DECIMAL(10, 2) )MODE DB2SQLCREATE TYPE MGR UNDER EMP AS(BONUS DECIMAL(10, 2))MODE DB2SQL49decembar 2010, Biljana Stojanović
Primer 2Krirati hijerarhijski tip Adresa. Postoji namera da se adrese koriste kao tipovi kolona. Nijezadata neposredna dužina, tako da se koristi podrazumevana vrednost. Unutar definicijeadresnog tipa enkapsuliran je externi metod koji računa koliko je blizu data adresa u odnosuna ulaznu adresu. Telo metoda se kreira naredbom CREATE METHOD.50decembar 2010, Biljana Stojanović
Primeri (3)Kreirati tip koji ima ugnježdene atribute strukturnog tipa.CREATE TYPE PROJECT AS( PROJ_NAME VARCHAR(20),PROJ_ID INTEGER,PROJ_MGR MGR,PROJ_LEAD EMP,LOCATION ADDR_T,AVAIL_DATE DATE)MODE DB2SQL;Definicija strukturnog tipa kojim je predstavljena osoba, sa atributima godine i adresa:CREATE TYPE Pe<strong>rs</strong>on_t AS(Name VARCHAR(20),Age INT,Address Address_t)INSTANTIABLEREF USING VARCHAR(13) FOR BIT DATAMODE DB2SQL;Za razliku od distinct tipova, tip atributa strukturnog tipa može biti i tip različit od ugrađenih tipova.U ovom primeru, tip atributa Address je takođe strukturni tip, Address_t.51decembar 2010, Biljana Stojanović
Čuvanje instanci strukturnog tipa Instanca strukturnog tipa može se sačuvati u bazi <strong>podataka</strong> na dva načina: Kao red tabele, u kome je svaka kolona tabele jedan atribut te instance. Da bi seomogućilo čuvanje objekata kao redova tabele, tabela se definiše strukturnim tipom,pre nego specifikovanjem svake kolone:CREATE TABLE Pe<strong>rs</strong>on OF Pe<strong>rs</strong>on_t ...Svaka kolona tabele dobija ime i tip na osnovu imena i tipa odgovarajućeg atributastrukturnog tipa. Takve tabele poznate su pod nazivom tipizirane tabele. Kao vrednost u koloni, pri čemu je tip kolone dati strukturni tip. Primer: kreira se tabela Properties koja sadrži kolonu Address strukturnog tipaAddress_t: CREATE TABLE Properties (ParcelNum INT, Photo BLOB(2K), Address Address_t) Strukturni tipovi mogu biti definisani kao INSTANTIABLE ili NOT INSTANTIABLE. Podrazumevano su instancni, što znači da se mogu kreirati instance tipova. Naprimer, ako se definiše Pe<strong>rs</strong>on_t kao NOT INSTANTIABLE, onda se ne mogu čuvatiinstance ovog tipa u bazi i ne mogu se kreirati tabele ili pogledi tog tipa.52decembar 2010, Biljana Stojanović
Hijerarhija strukturnih tipova Strukturni tipovi omogućavaju dodatno svojstvo – nasleđivanje. To znači da strukturni tip može imati podtip koji sadržisve atribute kao i dati strukturni tip, kao i dodatneatribute koji su za njega specifikovani. Originalni tip je utom slučaju nadtip. Na primer, strukturni tip Pe<strong>rs</strong>on_t može da ima atributeName, Age i Address. Podtip tipa Pe<strong>rs</strong>on_t može bitiEmployee_t koji sadrži atribute Name, Age i Address i,dodatno, sadrži atribute SerialNum, Salary i Dept.53decembar 2010, Biljana Stojanović
Hijerarhija strukturnih tipova (2)Skup podtipova koji se baziraju na istom nadtipu predstavlja hijerarhijutipova.Primer:Tip Manager_t nasleđuje atribute tipa Employee_t, ali sadrži i dodatniatribut, kao što je specijalni bonus koji je jedino dostupan za menagere.Tip Pe<strong>rs</strong>on_t je koreni tip hijerarhije. Pe<strong>rs</strong>on_t je nadtip tipova Employee_t iStudent_t. Odnos između nadtipa i podtipa je tranzitivan, tj. Pe<strong>rs</strong>on_t jetakođe nadtip i za Manager_t i Architect_t tipove.Tip odseka, BusinessUnit_t nema podtipove, tako da je njegova hijerarhijatrivijalna.54decembar 2010, Biljana Stojanović
Kreiranje hijerarhije strukturnih tipovaCREATE TYPE BusinessUnit_t AS( Name VARCHAR(20),Headcount INT)MODE DB2SQL;CREATE TYPE Pe<strong>rs</strong>on_t AS( Name VARCHAR(20),Age INT,Address Address_t)REF USING VARCHAR(13) FOR BIT DATAMODE DB2SQL;CREATE TYPE Student_t UNDER Pe<strong>rs</strong>on_tAS( SerialNum CHAR(6),GPA DOUBLE)MODE DB2SQL;CREATE TYPE Manager_t UNDEREmployee_t AS( Bonus DECIMAL(7,2))MODE DB2SQL;CREATE TYPE Employee_t UNDER Pe<strong>rs</strong>on_tAS( SerialNum INT,Salary DECIMAL(9,2),Dept REF(BusinessUnit_t))MODE DB2SQL;CREATE TYPE Architect_t UNDEREmployee_t AS( StockOption INTEGER)MODE DB2SQL;55decembar 2010, Biljana Stojanović
Definisanje ponašanja strukturnih tipovaDefinisanje ponašanja strukturnih tipova vrši se upotrebom metoda. Ne mogu sekreirati metodi za distinct tipove.Kreiranje metoda je slično kreiranju funkcija, osim što se metodi kreiraju specijalnoza dati tip, tako da su tip i opis njegovog ponašanja neraskidivo povezani.Specifik<strong>ac</strong>ija metoda mora biti pridružena tipu pre izvršenja naredbe CREATEMETHOD.Sledeća naredba dodaje specifik<strong>ac</strong>iju metoda calc_bonus za tip Employee_t:ALTER TYPE Employee_tADD METHOD calc_bonus (rate DOUBLE)RETURNS DECIMAL(7,2)LANGUAGE SQLCONTAINS SQLNO EXTERNAL ACTIONDETERMINISTIC;Jednom kada se pridruži specifik<strong>ac</strong>ija metoda odgovarajućem tipu, može se definisatiponašanje tipa kreiranjem metoda kao SQL metoda ili metoda definisanog namatičnom jeziku, prema zadatoj specifik<strong>ac</strong>iji (komandnom CREATE METHOD).56decembar 2010, Biljana Stojanović
Definisanje ponašanja strukturnih tipova (2) Na primer, sledeća naredba registruje SQL metodcalc_bonus koji se nalazi u istoj shemi kao i tip Employee_t:CREATE METHOD calc_bonus (rate DOUBLE)RETURNS DECIMAL(7,2)FOR Employee_tRETURN SELF..salary * rate; Može se kreirati više metoda sa istim imenom, sve dokimaju različit broj ili različite tipove argumenata, ili sudefinisani za tipove u različitim hijerarhijama tipova.57decembar 2010, Biljana Stojanović
Dinamičko izvršavanje metoda -polimorfizamMetodi definisani za neki strukturni tip mogu se pozivati samo nad instancama togtipa. Kada se definiše podtip, pored atributa koje nasleđuje, tu su i metodi definisaniza nadtip. Međutim, metodi nadtipa se mogu pozivati i nad instancama podtipova.Metod iz nadtipa se može predefinisati u podtipu, čime se omogućava polimorfizam.Polimorfizam omogućuje da se odluka koji će metod biti izvršen donosi na osnovutoga koji je tip instance strukturnog tipa nad kojim se metod primenjuje.Da bi se metod predefinisao, koristi se naredba CREATE TYPE (ili ALTER TYPE), uznavođenje klauzule OVERRIDING pre klauzule METHOD. Ako se ne navedeOVERRIDING, biće korišćen originalni metod (iz nadtipa). Da bi se definisaooverriding metod, moraju da budu zadovoljeni sledeći uslovi:Tip koji se kreira (ili menja) mora biti podtip strukturnog tipa čiji metod treba da sepredefinišePotpis metoda (ime metoda i lista parametara) koji se deklariše mora biti identičanpotpisu metoda u nadtipuOverriding metod mora implicitno da predefiniše tačno jedan originalni metodRutina koja treba da se predefiniše je metod instance strukturnog tipa.Originalni metod nije deklarisan sa klauzulom PARAMETER STYLE JAVA.58decembar 2010, Biljana Stojanović
PrimerTipovi <strong>podataka</strong>:CREATE TYPE a AS (z VARCHAR(20))METHOD foo(i INTEGER) RETURNS VARCHAR(80)LANGUAGE SQL;CREATE TYPE b UNDER a AS (y VARCHAR(20))OVERRIDING METHOD foo(i INTEGER) RETURNSVARCHAR(80);CREATE TYPE c UNDER a AS (x VARCHAR(20))OVERRIDING METHOD foo(i INTEGER) RETURNSVARCHAR(80);CREATE TYPE d UNDER b AS (w VARCHAR(20))OVERRIDING METHOD foo(i INTEGER) RETURNSVARCHAR(80);U ovoj situ<strong>ac</strong>iji, a je nadtip. Tipovi b i c supodtipovi tipa a. Konačno, d je podtip tipa b.Metodi:CREATE METHOD foo(i INTEGER) FOR aRETURN "In method foo_a. Input: " | char(i) | self..z | ".";CREATE METHOD foo(i INTEGER) FOR bRETURN "In method foo_b. Input: " | char(i) | self..z |" y = " | self..y | ".";CREATE METHOD foo(i INTEGER) FOR cRETURN "In method foo_c. Input: " | char(i) | self..z |" x = " | self..x | ".";CREATE METHOD foo(i INTEGER) FOR dRETURN "In method foo_d. Input: " | char(i) | self..z |" y = " | self..y | " w = " | self..w | ".";Originalni metod je fooA. fooB, fooC i fooDeksplicitno predefinišu metod fooA. fooDimplicitno preklapa fooB i fooA. Slično, fooBimplicitno preklapa fooA, dok fooCimplicitno preklapa fooA. (Eksplicitnopredefinisanje podrazumeva implicitnopredefinisanje )59decembar 2010, Biljana Stojanović
Poređenje strukturnih tipova.Funkcije kastovanjaDB2 automatski kreira funkcije koje kastuju vrednosti referentnog tipa u tipkoji ga reprezentuje i obrnuto.CREATE TYPE naredba ima opcionu klauzu CAST WITH koja omogućavaizbor imena za ove dve funkcije. Podrazumevano, imena funkcija su istakao i imena strukturnog tipa i reprezent<strong>ac</strong>ije referentnog tipa.Na primer, CREATE TYPE Pe<strong>rs</strong>on_t naredba automatski generiše funkcije:CREATE FUNCTION VARCHAR(REF(Pe<strong>rs</strong>on_t))RETURNS VARCHARiCREATE FUNCTION Pe<strong>rs</strong>on_t(VARCHAR(13))RETURNS REF(Pe<strong>rs</strong>on_t)Ove funkcije se koriste kad god je potrebno da se nova vrednost unese utipiziranu tabelu ili kada je potrebno porediti vrednost reference sa nekomdrugom vrednošću.DB2 takođe kreira funkcije koje omogućavaju poređenje referentnih tipovaupotrebom operatora: =, , =.60decembar 2010, Biljana Stojanović
Funkcija - konstruktor strukturnog tipa Kada se kreira strukturni tip, DB2 kreira funkciju istog imenakao i tip koji se kreira. Ova funkcija nema parametre i vraćainstancu strukturnog tipa sa svim atributima postavljenim nanull vrednosti. Za strukturni tip Pe<strong>rs</strong>on_t, na primer, kreira se funkcija:CREATE FUNCTION Pe<strong>rs</strong>on_t ( ) RETURNS Pe<strong>rs</strong>on_t Za podtip Manager_t, konstruktor ima sledeći format:CREATE FUNCTION Manager_t ( ) RETURNS Manager_t Za kreiranje instance tipa koja se unosi u kolonu tabele,koristiti konstruktor zajedno sa mutator-metodima. Ako je tip sačuvan u tabeli, ne treba koristiti konstruktor samutator metodima za ub<strong>ac</strong>ivanje instance tipa.61decembar 2010, Biljana Stojanović
Pristupni i mutator metodi strukturnihtipovaPristupni i mutator metodi postoje za svaki atribut instance strukturnog tipa.Instanca strukturnog tipa nad kojom se metod poziva zove se ciljna (subject) instanca metoda.Mutator metodom se menja vrednost odgovarajućeg atributa instance i vraća se takopromenjena instanca, dok se pristupnim metodom samo vraća tekuća vrednost odgovarajućegatributa.Za tip Pe<strong>rs</strong>or_t, pristupni i mutator metod za atribut age, na primer, imaju sledeću formu:ALTER TYPE Pe<strong>rs</strong>on_t ADD METHOD AGE()RETURNS INTEGER;ALTER TYPE Pe<strong>rs</strong>on_t ADD METHOD AGE(int)RETURNS Pe<strong>rs</strong>on_t; Za poziv metoda nad strukturnim tipom koristi se operator ‘..’ Primer upotrebe pristupnog metoda:CREATE FUNCTION MailingAddress (p Pe<strong>rs</strong>on_t)RETURNS VARCHAR(40)RETURN p..name() || ' ' || p..address() U ovoj funkciji, vrednosti kolona name i address instance tipa Pe<strong>rs</strong>on_t se dobijaju prekopristupnih metoda i nadovezuju se u jedan string – poštansku adresu.62decembar 2010, Biljana Stojanović
Uklanjanje korisničkih tipova Za uklanjanje korisničkih tipova (UDT) koristi se DROPnaredba. Ne može se ukloniti UDT ako se koristi: Za definiciju kolone postojeće tabele ili pogleda Kao tip postojeće tipizirane tabele ili tipiziranog pogleda Kao nadtip nekog drugog strukturnog tipa SUBP pokušava da ukloni svaku rutinu koja zavisi oduklonjenog tipa. Ne može biti uklonjena ako pogled, triger,provera ograničenja za tabelu (check constraint) ili neka drugarutina zavise od nje. Ako DB2 ne može da ukloni zavisnu rutinu,neće ukloniti ni odgovarajući tip.63decembar 2010, Biljana Stojanović