Master Informatique 20 10. 02. 22. 1 dr. Kiss AttilaAz Oracle XML DB.

Slides:



Advertisements
Hasonló előadás
Tananyag: konzultáció
Advertisements

2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Programozás III STRING-XML.
Adatbázis rendszerek I
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Oracle tuning server.101/b10752/toc.htm.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Delphi programozás alapjai
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
Adatbázis gyakorlat – SUBSELECT – Tarcsi Ádám március.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
PL/SQL I. ADATBÁZIS ALAPÚ RENDSZEREK.  PL/SQL = Procedural Language/SQL  utasítást ; zárja le  PL/SQL blokk lezárása: /  kis- és nagybetű egyenértékű.
megismerése, mintaadatbázis létrehozása
SQL – DQL (Data Query Language ) adat lekérdezések
INSERT INTO Egy vagy több rekordot ad hozzá a táblához. Egyetlen rekordot hozzáfűző kifejezés: INSERT INTO cél_tábla (mező1,mező2,…) VALUES (érték1, érték2,
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Triggerek II. ADATBÁZIS ALAPÚ RENDSZEREK.  Az Oracle kifinomult módon támogatja a sorszámozások generálását  Szekvencia: olyan adatbázis-objektum, amely.
(MY)SQL MEGJEGYZÉSEK. MYISAM VS. INNODB  A MySQL-ben többféle tárolási motor is használatos: MyISAM, InnoDB  A régebbi verziókban a MyISAM alapértelmezett,
Adatbázis alapú rendszerek
Adatbázis rendszerek II.
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Hernyák Zoltán XML validálás.
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 5. Nézettáblák létrehozása, módosítása és törlése.
ADATBÁZISOK
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Nézettáblák létrehozása, módosítása és törlése
Microsoft Excel Függvények VII..
Az SQL nyelv alapjai.
DML. Új rekord beszúrása: INSERT INTO tábla (oszlop1,oszlop2,…) VALUES (érték1,érték2,…); Rekord módosítása: UPDATE tábla SET oszlop = érték WHERE feltétel;
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Összetett adattípusok
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Adatbázis adminisztrátori ismeretek
2012. tavaszi félév Véső Tamás Véső Tamás OE­NIK / 18.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
Adatbázis-kezelés SQL-lel
Felhasználók és jogosultságok
Készítette: Tóth Ervin
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
Készítette: Lipp Marcell
SQL.
XML fejlesztések TSQL fejlesztések Tábla paraméter SQLCLR fejlesztések 8k limit feloldása Több paraméteres UDA-ek Ordered UDF-ek Entity Framework ADO.NET.
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
Egyenesvonalú (lineáris) adatszerkezetek
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Adatbázisok gyakorlat
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
1 Verseny 2000 gyakorlat SQL 2000 Server Portál adatbázis létrehozása.
Az 5,6,7 laborok VBA anyagának összefoglalása
Indexek 22 Index Table Key Row pointer … WHERE key = 22.
Programozás III JPA.
SQL aggregálás, csoportosítás és összekapcsolás Adatbázisok 1.
1 SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok.
Adatbázis alapú rendszerek
Triggerek Kalmár György.
A CLIPS keretrendszer
Előadás másolata:

Master Informatique dr. Kiss AttilaAz Oracle XML DB

Master Informatique dr. Kiss AttilaAz Oracle XML DB Az előadás vázlata 1.XML típusú mező definiálása, XML adatok beszúrása, lekérdezése * 2.XML sortípus használata * 3.XML függvények használata * 4.XMLIndexek használata 5.Összefoglalás * (Nikovits Tibor gyakorlatainak anyaga)

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML típusú mező Az Oracle az SYS.XMLTYPE típust használja XML tárolásra. A típushoz PUBLIC szinonima van definiálva, ezért XMLTYPE is használható. CREATE TABLE raktar (raktar_azon NUMBER(3), raktar_spec SYS.XMLTYPE, raktar_nev VARCHAR2(35 BYTE), epulet_azon NUMBER(4) );

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML beszúrása A beszúrás a CreateXML metódussal történik. INSERT INTO raktar VALUES(1, SYS.XMLType.CreateXML( ' Sajat Igen Nem Utca '), 'raktar1', '1000');

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML adatok lekérdezése A lekérdezés során XPath kifejezést és az EXTRACT metódus használjuk. SELECT r.raktar_azon, r.raktar_spec.EXTRACT('/Raktar/Tulaj') Eredmeny FROM raktar r; RAKTAR_AZON EREDMENY Sajat

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML típus átalakítása karaktertípussá Egy XML dokumentumot karakter típusú adattá konvertálhatunk a getStringVal metódussal, vagy CLOB- bá a getCLobVal függvénnyel. SELECT r.raktar_azon, r.raktar_spec.EXTRACT('/Raktar/Terulet').get Stringval() Eredmeny FROM raktar r WHERE r.raktar_azon=1; RAKTAR_AZON Eredmeny

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML elem értékének kiolvasása Az elem értékét a text() metódussal kaphatjuk meg. A visszakapott értéké típusa nem karakter, hanem úgynevezett XML dokumentum-töredék. SELECT r.raktar_azon, r.raktar_spec.EXTRACT('/Raktar/Tulaj/text()') Eredmeny FROM raktar r; RAKTAR_AZON Eredmeny Sajat

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML elem értékének kiolvasása A text() értéket a getStringVal, getNumberVal metódusokkal lehet átalakítani. SELECT r.raktar_azon, r.raktar_spec.extract('/Raktar/Tulaj/text()').getStringval() Eredmeny, r.raktar_spec.extract('/Raktar/Terulet/text() ').getNumberval() Eredmeny2 FROM raktar r WHERE r.raktar_azon=1; RAKTAR_AZON Eredmeny Eredmeny Sajat 25000

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML sorobjektum Az eddigi példákban az XML típus oszlopobjektumként szerepelt. Az XML lehet sorobjektum is. CREATE TABLE kolcsonzes_xmlt OF XMLType; INSERT INTO kolcsonzes_xmlt SELECT kolcs_spec FROM kolcsonzes k WHERE azon=1;

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML sorobjektum lekérdezése Mivel az XML sorobjektum is objektum, ezért az objektumokra vonatkozó lekérdezést használhatjuk. SELECT object_value FROM kolcsonzes_xmlt; OBJECT_VALUE Vagy a fentivel ekvivalens alábbi módon: SELECT VALUE(k) FROM kolcsonzes_xmlt k; VALUE(k)

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML sorobjektumok kezelése A sorobjektumnak is van objektum azonosítója, amit lekérdezhetünk vagy beszúrhatunk egy táblába, majd a DEREF függvény segítségével lekérdezhetjük az objektumot. SELECT REF(t) FROM kolcsonzes_xmlt t; CREATE TABLE xmlt_ref AS SELECT 1 AS azon, REF(t) AS xmldoku FROM kolcsonzes_xmlt t; SELECT DEREF(xmldoku) FROM xmlt_ref; DEREF(xmldoku)

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML sorobjektumok kezelése XPath lekérdezést is megfogalmazhatunk XML sorobjektumra. SELECT Jakab"]//CD') FROM xmlt_ref; Szep Holnap 3000

Master Informatique dr. Kiss AttilaAz Oracle XML DB DTD használata Az érvényességhez DTD-t adhatunk meg. INSERT INTO kolcsonzes VALUES(3, SYS.XMLType.CreateXML( ' <!DOCTYPE személy [ ]> ')); SELECT k.kolcs_spec.EXTRACT('/') FROM kolcsonzes k WHERE azon=3;

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML függvények Az Oracle sokféle függvényt biztosít arra, hogy a különböző formátumú adatokból (relációs, objektum-relációs) XML dokumentumot tudjunk létrehozni, illetve fordítva.

Master Informatique dr. Kiss AttilaAz Oracle XML DB SYS_XMLGEN(kif [,fmt]) függvény XML dokumentumot hoz létre a paraméterül kapott értékből. Megjegyzések: Ha egy SELECT utasításban használjuk a lekérdezés valamelyik oszlopára, akkor minden sorra külön dokumentumot hoz létre. Ha a paraméter egy skalár érték, akkor egy ezt tartalmazó XML elemet ad vissza. Ha a paraméter egy objektum példány, az attribútumokat külön XML elemekre képezi le. A kezdődő attribútumokból XML attribútumot (és nem XML elemeket!) csinál. Ha a paraméter egy XML dokumentum töredék, akkor azt egy XML elembe ágyazza.

Master Informatique dr. Kiss AttilaAz Oracle XML DB SYS_XMLGEN(kif [,fmt]) függvény Példa: SELECT SYS_XMLGEN(dnev) FROM dolgozo WHERE ROWNUM < 3; SMITH ALLEN

Master Informatique dr. Kiss AttilaAz Oracle XML DB SYS_XMLGEN(kif [,fmt]) függvény Az első lekérdezés egy XML töredéket ad vissza, amiből a függvény XML-t csinál. (Az elsőben nem egyetlen gyökérelem van, ezért nem jól formált XML dokumentum az eredmény.) SELECT EXTRACT(kolcs_spec, '//DVD').getStringVal() FROM kolcsonzes WHERE azon=1; Jegkorszak Shrek Uvegtigris SELECT SYS_XMLGEN(EXTRACT(kolcs_spec, '//DVD')).getStringVal() FROM kolcsonzes WHERE azon=1; Jegkorszak Shrek Uvegtigris

Master Informatique dr. Kiss AttilaAz Oracle XML DB SYS_XMLGEN(kif [,fmt]) függvény Az EXTRACT által visszaadott szöveges dokumentumtöredékek egybeolvadnak egyetlen töredékké. SELECT EXTRACT(kolcs_spec, '//DVD/text()').getStringVal() FROM kolcsonzes WHERE azon=1; JegkorszakShrekUvegtigris SELECT SYS_XMLGEN(EXTRACT(kolcs_spec, '//DVD/text()')).getStringVal() FROM kolcsonzes WHERE azon=1; JegkorszakShrekUvegtigris

Master Informatique dr. Kiss AttilaAz Oracle XML DB Az elem nevének megváltoztatása Az elem nevét meg is lehet változtatni egy formázó objektum megadásával. SELECT SYS_XMLGEN(EXTRACT(kolcs_spec, '//DVD/text()'), SYS.XMLGenFormatType.CreateFormat('ELEM')).getStringVal() FROM kolcsonzes WHERE azon=1; JegkorszakShrekUvegtigris

Master Informatique dr. Kiss AttilaAz Oracle XML DB Objektumok lekérdezése SELECT SYS_XMLGEN(TAGOK) FROM csapat WHERE nev='Fradi'; Albert Flori Kicsi Bp Magyar 1234 Novak Dezso Nagy Vac Magyar 4321

Master Informatique dr. Kiss AttilaAz Oracle XML DB SYS_XMLAGG(kif [,fmt]) függvény A kifejezés által meghatározott dokumentumokból vagy töredékekből (az összes sorból) egy XML dokumentumot hoz létre. Ennek is lehet formázó objektum paramétert megadni. SELECT SYS_XMLAGG(SYS_XMLGEN(dnev)).getStringVal() FROM dolgozo WHERE ROWNUM < 3; SMITH ALLEN

Master Informatique dr. Kiss AttilaAz Oracle XML DB SYS_XMLAGG(kif [,fmt]) függvény Ugyanez formázás megadásával: SELECT SYS_XMLAGG(SYS_XMLGEN(dnev), SYS.XMLGenFormatType.CreateFormat('SOROK')). getStringVal() FROM dolgozo WHERE ROWNUM < 3; SMITH ALLEN

Master Informatique dr. Kiss AttilaAz Oracle XML DB DBMS_XMLGEN csomag A következő példa a relációs lekérdezés eredményéből úgy csinál dokumentumot, hogy minden sorból lesz egy elem, a soron belüli oszlopokból pedig a sor alatt egy elem. A sor-elem nevét is megadhatjuk, ha NULL-ra állítjuk, akkor nem lesz külön elem a sorokból. Azt is megtehetjük, hogy a lekérdezésnek minden 3 (vagy tetszőleges n) sorából egy külön dokumentum készüljön. Részleteket lásd -> a package definícióban.

Master Informatique dr. Kiss AttilaAz Oracle XML DB DBMS_XMLGEN csomag CREATE TABLE tempXML (azon NUMBER(4), o sys.xmltype); DECLARE kornyezet DBMS_XMLGEN.ctxHandle; eredmeny CLOB; BEGIN kornyezet := DBMS_XMLGEN.newContext( 'SELECT region_name, country_name, city, street_address FROM hr.regions r, hr.countries c, hr.locations l WHERE l.country_id=c.country_id AND c.region_id=r.region_id AND region_name=”Europe” '); DBMS_XMLGEN.setRowSetTag(kornyezet, 'XMLDOK'); DBMS_XMLGEN.setRowTag(kornyezet, 'SOR'); eredmeny := DBMS_XMLGEN.getXML(kornyezet); INSERT INTO tempXML VALUES(1, SYS.XMLType.CreateXML(eredmeny)); COMMIT; DBMS_XMLGEN.closeContext(kornyezet); END;

Master Informatique dr. Kiss AttilaAz Oracle XML DB DBMS_XMLGEN csomag A példa eredménye: Europe Italy Roma 1297 Via Cola di Rie Europe Italy Venice Calle della Testa...

Master Informatique dr. Kiss AttilaAz Oracle XML DB DBMS_XMLGEN csomag Objektum-relációs tábla esetén viszont a dokumentum tükrözi az objektumok szerkezetét. Minden objektumtípusból egy elem lesz, az attribútumokból pedig egy leszármazott elem. A kezdődő oszlopnevekből és attribútumnevekből (objektumok attribútumaiból) az adott XML elem attribútuma lesz. Az alábbi példa rögtön XMLType typusú eredményt ad vissza és nem CLOB-ot, mint az előző.

Master Informatique dr. Kiss AttilaAz Oracle XML DB DBMS_XMLGEN csomag DECLARE kornyezet DBMS_XMLGEN.ctxHandle; eredmeny SYS.XMLType; BEGIN kornyezet := DBMS_XMLGEN.newContext('SELECT nev FROM csapat'); DBMS_XMLGEN.setRowSetTag(kornyezet, 'XMLDOK'); DBMS_XMLGEN.setRowTag(kornyezet, 'CSAPAT'); eredmeny := DBMS_XMLGEN.getXMLType(kornyezet); INSERT INTO tempXML VALUES(2, eredmeny); COMMIT; DBMS_XMLGEN.closeContext(kornyezet); END;

Master Informatique dr. Kiss AttilaAz Oracle XML DB SELECT o AS csapatok FROM tempxml WHERE azon=2; CSAPATOK Albert Flori Kicsi Bp Novak Dezso Nagy Vac...

Master Informatique dr. Kiss AttilaAz Oracle XML DB EXTRACT(XMLType, XPath) Az XPath kifejezés által megjelölt elemeket (csomópontokat, részfákat) adja vissza dokumentumtöredékként. SELECT warehouse_name, EXTRACT(warehouse_spec, '/Warehouse/Docks') o60 FROM warehouses WHERE warehouse_spec IS NOT NULL; WAREHOUSE_NAME O Southlake, Texas 2 San Francisco 1 New Jersey Seattle, Washington 3

Master Informatique dr. Kiss AttilaAz Oracle XML DB EXTRACTVALUE(XMLType, XPath) Hasonló az EXTRACT-hez, de ez az eredményt skalár értékként adja vissza. Épp ezért az XPath által megadott kifejezésnek egyetlen szöveges csomópontot vagy attribútumot kell eredményeznie, ellenkező esetben hibaüzenetet kapunk. SELECT warehouse_name, EXTRACTVALUE(warehouse_spec, '/Warehouse/Docks') o60 FROM warehouses WHERE warehouse_spec IS NOT NULL; WAREHOUSE_NAME O Southlake, Texas 2 San Francisco 1 New Jersey Seattle, Washington 3

Master Informatique dr. Kiss AttilaAz Oracle XML DB EXTRACTVALUE(XMLType, XPath) Lekérdezhetünk vele levélcsomópontot vagy attribútumot. SELECT EXTRACTVALUE(kolcs_spec, o60 FROM kolcsonzes WHERE azon=2; o SELECT EXTRACTVALUE(kolcs_spec, o60 FROM kolcsonzes WHERE azon=2; o Fekete Istvan

Master Informatique dr. Kiss AttilaAz Oracle XML DB EXISTSNODE(XMLType, XPath) 0 vagy 1 értékkel tér vissza attól függően, hogy a megadott XPath kifejezés eredményezett-e valamilyen csomópontot vagy attribútumot. SELECT warehouse_id, warehouse_name FROM oe.warehouses WHERE EXISTSNODE(warehouse_spec, '/Warehouse/Docks') = 1; WAREHOUSE_ID WAREHOUSE_NAME Southlake, Texas 2 San Francisco 4 Seattle, Washington

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLELEMENT(Elemnév [,érték] [,attribútumok]) Hasonló a SYS_XMLGen-hez, egy XML elemet hoz létre. Itt megadhatunk attribútumokat is, és egymásba ágyazva is meghívhatjuk a függvényt. Az első paraméter az elem nevét adja meg az alábbi példában. SELECT XMLELEMENT("last_name", e.last_name).getStringval() FROM hr.employees e WHERE e.employee_id IN (205, 206); Gietz Higgins

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLELEMENT(Elemnév [,érték] [,attribútumok]) Attribútumot és beágyazott elemet hozunk létre. A második attribútum nevét az oszlopnévből származtatja, ha nem adtuk meg. SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id AS "ID", e.last_name), XMLELEMENT("Dept", e.department_id), XMLELEMENT("Salary", e.salary)) o60 FROM hr.employees e WHERE e.employee_id = 206; O

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLELEMENT(Elemnév [,érték] [,attribútumok]) Az alábbi lekérdezés kicsit még összetettebb. Fontos, hogy a beágyazott SELECT csak egyetlen sorral térjen vissza, különben hibás lenne. Az alias ("Dept_name") megadása is kötelező, különben nem tudná elnevezni az attribútumot. A beágyazott SELECT mellett további SELECT-ek is szerepelhetnének még, pl. a location_id-t is lekérdezhetnénk. SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id, e.last_name), XMLELEMENT("Dept", XMLATTRIBUTES(e.department_id, (SELECT d.department_name FROM hr.departments d WHERE d.department_id = e.department_id) as "Dept_name")), XMLELEMENT("salary", e.salary), XMLELEMENT("Hiredate", e.hire_date)) AS "Emp Element" FROM hr.employees e WHERE employee_id = 205;

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLELEMENT(Elemnév [,érték] [,attribútumok]) Az előbbi lekérdezés eredménye: Emp Element

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLCONCAT(XMLType, XMLType,...) Összefűzi a paraméterül kapott elemeket egy sorozattá. Épp az ellenkezőjét csinálja, mint az XMLSequence. SELECT employee_id, XMLCONCAT(XMLELEMENT("First", e.first_name), XMLELEMENT("Last", e.last_name)) o60 FROM hr.employees e WHERE e.employee_id > 202; EMPLOYEE_ID O Susan Mavris 204 Hermann Baer 205 Shelley Higgins 206 William Gietz

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLSEQUENCE(XMLType) A dokumentumtöredékekből dinamikus tömböt (VARRAY) hoz létre, amelynek elemei XML dokumentumok. SELECT EXTRACT(kolcs_spec, FROM kolcsonzes WHERE azon=2; MomoTuskevar Az alábbi VARRAY-t ad vissza, amit a kliens programok nem tudnak megjeleníteni. A lekérdezés(ek) eredménye 1 sor, amiben egy XML-eket tartalmazó VARRAY van. Valójában ez egy üres VARRAY lesz, ahogy majd lejjebb látni fogjuk, mivel nem dokumentumtöredék amivel fel kellene tölteni. SELECT XMLSequence(EXTRACT(k.kolcs_spec, FROM kolcsonzes k WHERE azon=2; SELECT XMLSequence(EXTRACT(k.kolcs_spec, '//Konyv/AR/text()')) FROM kolcsonzes k WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLSEQUENCE(XMLType) A tömböt táblává alakíthatjuk és lekérdezhetjük. Mivel a TABLE által létrejött táblának nincs oszlopa, ezért azt a VALUE(t) hivatkozással vagy COLUMN_VALUE hivatkozással kérdezhetjük le. A lekérdezés 2 sort ad vissza. SELECT value(t) FROM TABLE(SELECT XMLSequence(EXTRACT(k.kolcs_spec, '//Konyv')) FROM kolcsonzes k WHERE azon=2) t;

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLSEQUENCE(XMLType) Az alábbi lekérdezés is 2 sort ad vissza. A VARRAY 2 XML elemből áll. SELECT value(t) FROM TABLE(SELECT XMLSequence(EXTRACT(k.kolcs_spec, '//Konyv/Ar')) FROM kolcsonzes k WHERE azon=2) t;

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLSEQUENCE(XMLType) Az attribútumokból vagy szöveges tartalmakból azonban 0 elemű tömb lesz, vagyis ezekkel nem tölti fel a VARRAY-t az XMLSequence. SELECT count(*) FROM TABLE(SELECT XMLSequence(EXTRACT(k.kolcs_spec, '//Konyv/Ar/text()')) FROM kolcsonzes k WHERE azon=2) t; SELECT count(*) FROM TABLE(SELECT XMLSequence(EXTRACT(k.kolcs_spec, FROM kolcsonzes k WHERE azon=2) t;

Master Informatique dr. Kiss AttilaAz Oracle XML DB Külső XML adatok beolvasása Az alábbi utasítás egy külső fájlból beolvasott adatokat XML-lé konvertál. A BFILENAME függvény egy lokátort ad vissza, amit az XMLType konstruktor függvény használ fel. SELECT XMLType(bfilename('INFOKEZ3','kolcsonzesek.xml'), nls_charset_id('EE8ISO8859P2')).getStringVal() FROM dual; Ez pedig be is teszi egy táblába a külső fájlból olvasott XML-t. INSERT INTO tempXML VALUES (2, XMLType(bfilename('INFOKEZ3', 'kolcsonzesek.xml'), nls_charset_id('EE8ISO8859P2')));

Master Informatique dr. Kiss AttilaAz Oracle XML DB XML adatok módosítása Hozzunk létre még egy sort a táblában, amelyben most csak Gipsz Jakab kölcsönzései lesznek benne. A továbbiakban ezt a 2-es azonosítójú sort fogjuk módosítgatni. INSERT INTO kolcsonzes SELECT 2, EXTRACT(kolcs_spec, Jakab"]') FROM kolcsonzes;

Master Informatique dr. Kiss AttilaAz Oracle XML DB DELETEXML(XMLType, XPath) Kitörli a megadott csomópontokat (és az alattuk levő részfát is) vagy attribútumokat. Töröljük ki a Momo-ra vonatkozó kölcsönzést SELECT DELETEXML(kolcs_spec, FROM kolcsonzes WHERE azon=2; Töröljük ki a könyvek 'cim' attribútumait SELECT DELETEXML(kolcs_spec, FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB APPENDCHILDXML(XMLType, XPath, Value) A megadott helyekre csomópontokat szúr be azok gyermek csomópontjaként. Szúrjunk be egy újabb könyvet Gipsz Jakab Konyvek csomópontja alá. A könyvek között a most beszúrt lesz az utolsó. SELECT APPENDCHILDXML(kolcs_spec, Jakab"]/Konyvek', XMLType( ' 2400 ')) FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB APPENDCHILDXML(XMLType, XPath, Value) Egy gyermek nélküli csomópontot megadhatunk az alábbi rövidített módon is SELECT APPENDCHILDXML(kolcs_spec, Jakab"]/Konyvek', XMLType( ' ')) FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB INSERTCHILDXML(XMLType, XPath, Value, XML) A 3. paraméterben megadott típusú csomópontok közé szúr be utolsónak még egyet az XPath kifejezés által kijelölt csomópont gyermekeként. Új DVD-k csomópont beszúrása SELECT INSERTCHILDXML(kolcs_spec, Jakab"]', 'DVD-k', XMLType(' Kill Bill ')) FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB INSERTCHILDXML(XMLType, XPath, Value, XML) Új DVD-k csomópont más szerkezettel, új attribútummal: SELECT INSERTCHILDXML(kolcs_spec, Jakab"]', 'DVD-k', XMLType(' ')) FROM kolcsonzes WHERE azon=2; Új CD-k csomópont beszúrása: SELECT INSERTCHILDXML(kolcs_spec, Jakab"]', 'CD-k', XMLType(' Kapuk 3000 ')) FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB INSERTXMLBEFORE(XMLType, XPath, XML) Az XPath kifejezés által megadott csomópontok elé szúr be egy elemet. Szúrjunk be a két könyv közé még egyet. SELECT INSERTXMLBEFORE(kolcs_spec, Jakab"]//Konyv[2]', XMLType( ' 2400 ')) FROM kolcsonzes WHERE azon=2; Minden Ar csomópont elé szúrjunk be. SELECT INSERTXMLBEFORE(kolcs_spec, '//Ar', XMLType(' Blabla ')) FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB UPDATEXML(XMLType, XPath, Value) A megadott részt módosítja a dokumentumon belül. Módosíthatunk attribútum értéket, elem tartalmat is. Cseréljük le a Tuskevar könyvet egy másikra SELECT UPDATEXML(kolcs_spec, XMLType( ' 2400 ')) FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB UPDATEXML(XMLType, XPath, Value) Módosítsuk a Tuskevar konyv címét. SELECT UPDATEXML(kolcs_spec, 'Uj_tuskevar') FROM kolcsonzes WHERE azon=2; Állítsuk üres-re a cim attribútumot. SELECT UPDATEXML(kolcs_spec, NULL) FROM kolcsonzes WHERE azon=2; Az alábbi üres elemet csinál a Tuskevar könyvből. SELECT UPDATEXML(kolcs_spec, NULL) FROM kolcsonzes WHERE azon=2;

Master Informatique dr. Kiss AttilaAz Oracle XML DB Oracle XML indexelés Függvény-alapú indexelés XMLindex Szövegindexek (Oracle Text indexes ) Oracle 11g előtt: CTXXPath Indexes –nem fejlesztik tovább, helyette van az XMLindex

Master Informatique dr. Kiss AttilaAz Oracle XML DB Függvény-alapú indexelés Akkor használható, ha az XPath kifejezés egyetlen csúcsot (elemet, vagy attribútumot) ad vissza. B-fát vagy bitmap indexet lehet használni. Akkor hasznos, ha ugyanazt az XPath lekérdezést sokszor használjuk WHERE feltételekben.

Master Informatique dr. Kiss AttilaAz Oracle XML DB Függvény-alapú index CREATE TABLE po_clob OF XMLType XMLTYPE STORE AS CLOB ELEMENT " r.xsd#PurchaseOrder"; Table created. INSERT INTO po_clob SELECT OBJECT_VALUE FROM OE.purchaseorder; 132 rows created. CREATE UNIQUE INDEX po_fn_based_ix ON po_clob (extractValue(OBJECT_VALUE, '/PurchaseOrder/Reference')); Index created. INSERT INTO po_clob VALUES (XMLType(bfilename('XMLDIR', 'EABEL PDT.xml'), nls_charset_id('AL32UTF8'))); INSERT INTO po_clob * ERROR at line 1: ORA-00001: unique constraint (OE.PO_FN_BASED_IX) violated

Master Informatique dr. Kiss AttilaAz Oracle XML DB Függvény-alapú index Az existsNode nem használja fel az indexet. EXPLAIN PLAN FOR SELECT OBJECT_VALUE FROM po_clob WHERE existsNode(OBJECT_VALUE, '/PurchaseOrder[Reference="EABEL PDT"') = 1; Explained. SET ECHO OFF PLAN_TABLE_OUTPUT | Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time | 0 | SELECT STATEMENT | | 42 | | 23 (27)|00:00:01| |* 1| TABLE ACCESS FULL| PO_CLOB | 42 | | 23 (27)|00:00:01|

Master Informatique dr. Kiss AttilaAz Oracle XML DB Függvény-alapú index A következő lekérdezés már használja az indexet. EXPLAIN PLAN FOR SELECT OBJECT_VALUE FROM po_clob WHERE extractValue(OBJECT_VALUE, '/PurchaseOrder/Reference') = 'EABEL PDT'; Explained. SET ECHO OFF PLAN_TABLE_OUTPUT | Id | Operation Name | Rows | Bytes | Cost (%CPU)| Time | | 0 | SELECT STATEMENT | | 1 | 2002 |1 (0)|00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| PO_CLOB | 1| 2002 |1 (0)|00:00:01 | |* 2 | INDEX UNIQUE SCAN | PO_FN_BASED_IX |1 | |0 (0)|00:00:01 |

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex Az XML-re vonatkozó összes XPath kifejezést tartalmazza, emiatt nagyon nagy méretű is lehet. XMLQuery, XMLTable, XMLExists, XMLCast, extract, extractValue és existsNode esetén is kihasználhatja a lekérdezés-optimalizátor ezt az indexet. Akkor is használható, ha az XPath lekérdezés eredménye nem egyelemű.

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex Néhány eset, amikor nem használható: –felhasználó által definiált XPath függvények – child, descendant és attribute irányoktól eltérő irányok –uniót ( | ) használó kifejezések Az XMLIndex 3 komponensből áll –Útvonalindex (path index) –Címkéző index (order index) –Értékindex (value index)

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex Path Table szerkezete ColumnData Type PATHIDRAW(8) RIDROWID ORDER_KEYRAW(1000) LOCATORRAW(2000) VALUE VARCHAR2(4000) A Locator a töredék gyorsabb eléréséhez szükséges mutató.

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex Path Table szerkezete SBELL PDT SVOLLMAN... ABEL PST ZLOTKEY KING...

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex Path Table szerkezete PATHIDIndexed XPath 1/PurchaseOrder 2/PurchaseOrder/Reference 3/PurchaseOrder/Actions 4/PurchaseOrder/Actions/Action 5/PurchaseOrder/Actions/Action/User

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex Path Table szerkezete PATHIDRIDORDER_KEYVALUE 1 R11 —— 2 R1 1.1 SBELL PDT 3 R1 1.2—— 4 R —— 5 R SVOLLMAN 1 R2 1—— 2 R2 1.1 ABEL PST 3 R2 1.2—— 4 R —— 5 R ZLOTKEY 4 R —— 5 R KING

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex Path Table RidPath OrderKey ValueLocatorNumValue Rid1po Rid1po.data1 7 Rid1 po.data.item 1.1 “foo”18 Rid1 po.data.pkg 1.2 “123”39123 Rid1 po.data.item 1.3 “bar”58 foo 123 bar

Master Informatique dr. Kiss AttilaAz Oracle XML DB Az OrderKey (Dewey Order) name child person hobby

Master Informatique dr. Kiss AttilaAz Oracle XML DB XMLIndex készítése CREATE INDEX po_xmlindex_ix ON po_clob (OBJECT_VALUE) INDEXTYPE IS XDB.XMLIndex; CREATE INDEX po_xmlindex_hybrid_ix ON li_clob (extract(OBJECT_VALUE, '/PurchaseOrder/LineItems')) INDEXTYPE IS XDB.XMLIndex;