1 / 65

Az Oracle XML DB

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

myrrh
Télécharger la présentation

Az Oracle XML DB

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Az Oracle XML DB

  2. Az előadás vázlata • XML típusú mező definiálása, XML adatok beszúrása, lekérdezése * • XML sortípus használata * • XML függvények használata * • XMLIndexek használata • Összefoglalás * (Nikovits Tibor gyakorlatainak anyaga)

  3. 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_specSYS.XMLTYPE, raktar_nev VARCHAR2(35 BYTE), epulet_azon NUMBER(4) );

  4. XML beszúrása • A beszúrás a CreateXML metódussal történik. INSERT INTO raktar VALUES(1, SYS.XMLType.CreateXML( '<?xml version="1.0"?> <Raktar> <Tulaj>Sajat</Tulaj> <Terulet>25000</Terulet> <Folyoviz>Igen</Folyoviz> <Vasut>Nem</Vasut> <Parkolas>Utca</Parkolas> </Raktar>'), 'raktar1', '1000');

  5. 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 ----------- -------- 1 <Tulaj>Sajat</Tulaj>

  6. 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').getStringval() Eredmeny FROM raktar r WHERE r.raktar_azon=1; RAKTAR_AZON Eredmeny ----------- -------- 1 <Terulet>25000</Terulet>

  7. 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 ----------- -------- 1 Sajat

  8. 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 Eredmeny2 ----------- ------------------- ---------- 1 Sajat 25000

  9. 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;

  10. 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 ---------------------------------- <Kolcsonzesek> ... </Kolcsonzesek> • Vagy a fentivel ekvivalens alábbi módon: SELECT VALUE(k) FROM kolcsonzes_xmlt k; VALUE(k) ---------------------------------- <Kolcsonzesek> ... </Kolcsonzesek>

  11. 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) ---------------------------------- <Kolcsonzesek> ... </Kolcsonzesek>

  12. XML sorobjektumok kezelése • XPath lekérdezést is megfogalmazhatunk XML sorobjektumra. SELECT DEREF(xmldoku).EXTRACT('//Kolcsonzo[@nev="Gipsz Jakab"]//CD') FROM xmlt_ref; ------------------------ <CD eloado="Zoran"> <Cim>Szep Holnap</Cim> <Ar>3000</Ar> </CD>

  13. DTD használata • Az érvényességhez DTD-t adhatunk meg. INSERT INTO kolcsonzes VALUES(3, SYS.XMLType.CreateXML( '<?xml version="1.0" standalone="no"?> <!DOCTYPE személy [ <!ELEMENT személy EMPTY> <!ATTLIST személy név CDATA #REQUIRED gyumolcs CDATA #IMPLIED> ]> <személy név="Klotild" gyumolcs="dinnye"/>')); SELECT k.kolcs_spec.EXTRACT('/') FROM kolcsonzes k WHERE azon=3; ------------------------------------------ <személy név="Klotild" gyumolcs="dinnye"/>

  14. 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.

  15. 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 '@'-al 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.

  16. SYS_XMLGEN(kif [,fmt]) függvény • Példa: SELECT SYS_XMLGEN(dnev) FROM dolgozo WHERE ROWNUM < 3; --------------------- <?xml version="1.0"?> <DNEV>SMITH</DNEV> <?xml version="1.0"?> <DNEV>ALLEN</DNEV>

  17. 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; -------------------------------------------------------- <DVD ar="4000">Jegkorszak</DVD><DVD ar="3500">Shrek</DVD><DVD ar="2500">Uvegtigris</DVD> SELECT SYS_XMLGEN(EXTRACT(kolcs_spec, '//DVD')).getStringVal() FROM kolcsonzes WHERE azon=1; --------------------------------- <?xml version="1.0"?> <ROW> <DVD ar="4000">Jegkorszak</DVD> <DVD ar="3500">Shrek</DVD> <DVD ar="2500">Uvegtigris</DVD> </ROW>

  18. 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; --------------------------- <?xml version="1.0"?> <ROW>JegkorszakShrekUvegtigris</ROW>

  19. 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; ----------------------------- <?xml version="1.0"?> <ELEM>JegkorszakShrekUvegtigris</ELEM>

  20. Objektumok lekérdezése SELECT SYS_XMLGEN(TAGOK) FROM csapat WHERE nev='Fradi'; ---------------------------- <?xml version="1.0"?> <TAGOK> <SZEMELY_TYP> <NEV>Albert Flori</NEV> <CIM> <UTCA>Kicsi</UTCA> <VAROS>Bp</VAROS> <ORSZAG>Magyar</ORSZAG> <IRSZAM>1234</IRSZAM> </CIM> </SZEMELY_TYP> <SZEMELY_TYP> <NEV>Novak Dezso</NEV> <CIM> <UTCA>Nagy</UTCA> <VAROS>Vac</VAROS> <ORSZAG>Magyar</ORSZAG> <IRSZAM>4321</IRSZAM> </CIM> </SZEMELY_TYP> </TAGOK>

  21. 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; --------------------- <?xml version="1.0"?> <ROWSET> <DNEV>SMITH</DNEV> <DNEV>ALLEN</DNEV> </ROWSET>

  22. 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; --------------------- <?xml version="1.0"?> <SOROK> <DNEV>SMITH</DNEV> <DNEV>ALLEN</DNEV> </SOROK>

  23. 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.

  24. 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;

  25. DBMS_XMLGEN csomag • A példa eredménye: -------------------------------------------------------- <?xml version="1.0"?> <XMLDOK> <SOR> <REGION_NAME>Europe</REGION_NAME> <COUNTRY_NAME>Italy</COUNTRY_NAME> <CITY>Roma</CITY> <STREET_ADDRESS>1297 Via Cola di Rie</STREET_ADDRESS> </SOR> <SOR> <REGION_NAME>Europe</REGION_NAME> <COUNTRY_NAME>Italy</COUNTRY_NAME> <CITY>Venice</CITY> <STREET_ADDRESS>93091 Calle della Testa</STREET_ADDRESS> </SOR> ... </XMLDOK>

  26. 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 '@'-al 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ő.

  27. DBMS_XMLGEN csomag DECLARE kornyezet DBMS_XMLGEN.ctxHandle; eredmeny SYS.XMLType; BEGIN kornyezet := DBMS_XMLGEN.newContext('SELECT nev "@nev",tagok 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;

  28. SELECT o AS csapatok FROM tempxml WHERE azon=2; CSAPATOK ------------------------------ <?xml version="1.0"?> <XMLDOK> <CSAPAT nev="Fradi"> <TAGOK> <SZEMELY_TYP> <NEV>Albert Flori</NEV> <CIM> <UTCA>Kicsi</UTCA> <VAROS>Bp</VAROS> </CIM> </SZEMELY_TYP> <SZEMELY_TYP> <NEV>Novak Dezso</NEV> <CIM> <UTCA>Nagy</UTCA> <VAROS>Vac</VAROS> </CIM> </SZEMELY_TYP> </TAGOK> </CSAPAT> <CSAPAT nev="Ujpest"> ... </CSAPAT> </XMLDOK>

  29. 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 O60 ----------------------------------- ---------------- Southlake, Texas <Docks>2</Docks> San Francisco <Docks>1</Docks> New Jersey Seattle, Washington <Docks>3</Docks>

  30. 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 O60 ----------------------------------- --- Southlake, Texas 2 San Francisco 1 New Jersey Seattle, Washington 3

  31. EXTRACTVALUE(XMLType, XPath) • Lekérdezhetünk vele levélcsomópontot vagy attribútumot. SELECT EXTRACTVALUE(kolcs_spec, '//Konyv[@cim="Tuskevar"]/Ar') o60 FROM kolcsonzes WHERE azon=2; o60 ---- 2500 SELECT EXTRACTVALUE(kolcs_spec, '//Konyv[@cim="Tuskevar"]/@szerzo') o60 FROM kolcsonzes WHERE azon=2; o60 ------------- Fekete Istvan

  32. 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 ------------ ------------------- 1 Southlake, Texas 2 San Francisco 4 Seattle, Washington

  33. 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); ------------------------------ <last_name>Gietz</last_name> <last_name>Higgins</last_name>

  34. 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; O60 -------------------------------- <Emp ID="206" LAST_NAME="Gietz"> <Dept>110</Dept> <Salary>8300</Salary> </Emp>

  35. 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;

  36. XMLELEMENT(Elemnév [,érték] [,attribútumok]) • Az előbbi lekérdezés eredménye: Emp Element --------------------------------- <Emp EMPLOYEE_ID="205" LAST_NAME="Higgins"> <Dept DEPARTMENT_ID="110" Dept_name="Accounting"></Dept> <salary>12000</salary> <Hiredate>1994-06-07</Hiredate> </Emp>

  37. 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 O60 ----------- ------------------------------------------ 203 <First>Susan</First><Last>Mavris</Last> 204 <First>Hermann</First><Last>Baer</Last> 205 <First>Shelley</First><Last>Higgins</Last> 206 <First>William</First><Last>Gietz</Last>

  38. XMLSEQUENCE(XMLType) • A dokumentumtöredékekből dinamikus tömböt (VARRAY) hoz létre, amelynek elemei XML dokumentumok. SELECT EXTRACT(kolcs_spec, '//Konyv/@cim').getStringVal() 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, '//Konyv/@cim')) FROM kolcsonzes k WHERE azon=2; SELECT XMLSequence(EXTRACT(k.kolcs_spec, '//Konyv/AR/text()')) FROM kolcsonzes k WHERE azon=2;

  39. 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; --------------------------------------------- <Konyv cim="Momo" szerzo="Michael Ende"> <Ar>2000</Ar> </Konyv> <Konyv cim="Tuskevar" szerzo="Fekete Istvan"> <Ar>2500</Ar> </Konyv>

  40. 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; ------------- <Ar>2000</Ar> <Ar>2500</Ar>

  41. 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; ------- 0 SELECT count(*) FROM TABLE(SELECT XMLSequence(EXTRACT(k.kolcs_spec, '//Konyv/@cim')) FROM kolcsonzes k WHERE azon=2) t; ------- 0

  42. 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')));

  43. 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, '//Kolcsonzo[@nev="Gipsz Jakab"]') FROM kolcsonzes;

  44. 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, '//Konyv[@cim="Momo"]') FROM kolcsonzes WHERE azon=2; • Töröljük ki a könyvek 'cim' attribútumait SELECT DELETEXML(kolcs_spec, '//Konyv/@cim') FROM kolcsonzes WHERE azon=2;

  45. 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, '//Kolcsonzo[@nev="Gipsz Jakab"]/Konyvek', XMLType( '<Konyv cim="Rokonok" szerzo="Moricz Zsigmond"> <Ar>2400</Ar> </Konyv>')) FROM kolcsonzes WHERE azon=2;

  46. 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, '//Kolcsonzo[@nev="Gipsz Jakab"]/Konyvek', XMLType( '<Konyv cim="Rokonok" szerzo="Moricz Zsigmond"/>')) FROM kolcsonzes WHERE azon=2;

  47. 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, '//Kolcsonzo[@nev="Gipsz Jakab"]', 'DVD-k', XMLType('<DVD-k> <DVD ar="5000">Kill Bill</DVD> </DVD-k>')) FROM kolcsonzes WHERE azon=2;

  48. INSERTCHILDXML(XMLType, XPath, Value, XML) • Új DVD-k csomópont más szerkezettel, új attribútummal: SELECT INSERTCHILDXML(kolcs_spec, '//Kolcsonzo[@nev="Gipsz Jakab"]', 'DVD-k', XMLType('<DVD-k ujattr="100"></DVD-k>')) FROM kolcsonzes WHERE azon=2; • Új CD-k csomópont beszúrása: SELECT INSERTCHILDXML(kolcs_spec, '//Kolcsonzo[@nev="Gipsz Jakab"]', 'CD-k', XMLType('<CD-k> <CD eloado="Kormoran"> <Cim>Kapuk</Cim> <Ar>3000</Ar> </CD> </CD-k>')) FROM kolcsonzes WHERE azon=2;

  49. 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, '//Kolcsonzo[@nev="Gipsz Jakab"]//Konyv[2]', XMLType( '<Konyv cim="Rokonok" szerzo="Moricz Zsigmond"> <Ar>2400</Ar> </Konyv>')) FROM kolcsonzes WHERE azon=2; • Minden Ar csomópont elé szúrjunk be. SELECT INSERTXMLBEFORE(kolcs_spec, '//Ar', XMLType('<Ar_jon osszeg="Occso">Blabla</Ar_jon>')) FROM kolcsonzes WHERE azon=2;

  50. 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, '//Konyv[@cim="Tuskevar"]', XMLType( '<Konyv cim="Rokonok" szerzo="Moricz Zsigmond"> <Ar>2400</Ar> </Konyv>')) FROM kolcsonzes WHERE azon=2;

More Related