XML a ORACLE Petr Davídek



Podobné dokumenty
Oracle XML DB. Tomáš Nykodým

Ukládání a vyhledávání XML dat

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Využití XML v DB aplikacích

Návrh a tvorba WWW stránek 1/14. PHP a databáze

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Databáze I. Přednáška 7

Databázové systémy Cvičení 5.2

13. blok Práce s XML dokumenty v databázi Oracle

Semestrální práce z DAS2 a WWW

Databáze I. Přednáška 4

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Virtual Private Database (VPD) Jaroslav Kotrč

Tabulka fotbalové ligy

Zpracování XML v Oracle - případová studie

Verzování a publikace dat na webu za pomoci PostgreSQL

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Co se stane po jeho vykonání? Vyberte libovolný počet možných odpovědí. Správná nemusí být žádná, ale také mohou být správné všechny.

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Řešení úkolů. Cvičení 1. Založení tabulky se specifikací fyzického uložení. Úkol 1.1

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

6. SQL složitější dotazy, QBE

Použití databází na Webu

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Jazyk PL/SQL Úvod, blok

Virtual private database. Antonín Steinhauser

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Tvorba informačních systémů

Úvod do databázových systémů

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Databázové systémy I

Diplomová práce. Použití Oracle RDBMS jako XML Databáze

Předmluva k druhému vydání 13. Úvod 17. ČÁST 2 Vytváření dokumentů XML 65

Integritní omezení (IO)

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Text úlohy. Systémový katalog (DICTIONARY):

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Objektově relační databáze a ORACLE 8

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Michal Krátký, Miroslav Beneš

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Deklarativní IO shrnutí minulé přednášky

Optimalizace dotazů a databázové transakce v Oracle

Vkládání, aktualizace, mazání

4IT218 Databáze. 4IT218 Databáze

Tento blok je věnován vytváření uživatelských balíků funkcí v jazyce PL/SQL a použití systémových balíků. 2-3 hodiny

PG 9.5 novinky ve vývoji aplikací

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Databáze I. 5. přednáška. Helena Palovská

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

PHP a Large Objecty v PostgreSQL

SQL a XML jako alternativa ke klasickým unixovým nástrojům

B Organizace databáze na fyzické úrovni u serveru Oracle

Databázové a informační systémy Jana Šarmanová

Jazyk SQL 3 - DML, DDL, TCL, DCL

Zápisování dat do databáze

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Transformace konceptuálního modelu na relační

Kapitola 6: Omezení integrity. Omezení domény

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Databázové systémy. Cvičení 6: SQL

Konceptuální modelování a SQL

SQL - trigger, Databázové modelování

Popis souboru pro generování reportů *.report

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Abstraktní datové typy Objektový přístup v Oracle

Operátory ROLLUP a CUBE

Sada 1 - PHP. 14. Úvod do jazyka SQL

Administrace Oracle Práva a role, audit. Kukhar Maria

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

PRG036 Technologie XML

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Administrace Oracle. Práva a role, audit

MySQL sežere vaše data

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

Kapitola 4: SQL. Základní struktura

Dotazovací jazyk SQL I

Jazyk SQL databáze SQLite. připravil ing. petr polách

TÉMATICKÝ OKRUH Softwarové inženýrství

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

PODPORA PRO PRÁCI S XML U DATABÁZOVÉHO SERVERU MICROSOFT SQL SERVER 2008

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

Materiál ke cvičením - SQL

Kód v databázi. RNDr. Ondřej Zýka

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

Databázové systémy a SQL

XML databáze: současný stav a perspektivy

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

Embedded SQL v C/C++ III - pole, struktury. Jindřich Vodrážka

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Databázové a informační systémy. Dokumentace k projektu. Učební sklad

WWW dotazovací služby pro prostorová data URM. Jiří Čtyroký Útvar rozvoje hl. m. Prahy

Transkript:

XML a ORACLE Petr Davídek

Jak to vypadalo dříve (verze 8) Nebyla nativní podpora XML, nutné doinstalovat (java-based) XML ukládáno jako LOB, BFILE DBMS_XMLQuery, XMLDOM, XML_PARSER základní balíky pro práci s XML sql skript $ORACLE_HOME/rdbms/admin/catxsu.sql) loadjava -v -r -grant PUBLIC $ORACLE_HOME/xdk/lib/xmlparserv2.jar $ORACLE_HOME/xdk/plsql/parser/bin/load.sql Granty a synonyma grant execute on xmldom to public; grant execute on xmlparser to public; create public synonym xmldom for sys.xmldom; create public synonym xmlparser for sys.xmlparser;

Práce s XML ve verzi 8 výsledek SQL dotazu do XML 1 DECLARE Ctx DBMS_XMLQuery.ctxType; -- SQL do XML xml clob; emp_no NUMBER := 7369; xmlc varchar2(4000); off integer := 1; len integer := 4000; BEGIN Ctx := DBMS_XMLQuery.newContext('SELECT * FROM emp WHERE empno = :empno'); DBMS_XMLQuery.setBindValue(Ctx, 'empno', emp_no); xml := DBMS_XMLQuery.getXML(Ctx); DBMS_XMLQuery.closeContext(Ctx); DBMS_LOB.READ(xml, len, off, xmlc); DBMS_OUTPUT.PUT_LINE(xmlc); END; /

Práce s XML ve verzi 8 výsledek SQL dotazu do XML 2 <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <ENAME>SMITH</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>12/17/1980 0:0:0</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> </ROWSET>

Práce s XML ve verzi 8 Parsing XML dokumentu Balík XMLParser DECLARE p_parser xmlparser.parser, l_doc xmldom.domdocument; l_xml CLOB; BEGIN SELECT clob_content INTO l_xml FROM nestt_docs WHERE oid = p_xml_oid; xmlparser.setvalidationmode(p_parser, false); xmlparser.parseclob(p_parser, l_pom_clob); l_doc := xmlparser.getdocument(p_parser); END; / Další možnosti parsingu ParseFile ParseUrl

Práce s XML ve verzi 8 Zpracování XML pomocí DOM DECLARE p_doc xmldom.domdocument, p_nodename varchar2(20) := 'EMP'; l_listdata xmldom.domnodelist; l_nodedata xmldom.domnode; BEGIN l_listdata := xmldom.getelementsbytagname(p_doc, p_nodename); l_nodedata := xmldom.item(l_listdata, 0); xmldom.writetobuffer(l_nodedata, l_value); END; / Další funkce pro parsing a vytváření XML v balíku XMLDOM

XML v ORACLE (9i, 10g) Od verze 9.2.0 podpora XML XMLTYPE nový datový typ ORACLE XMLDB nejedná se o xml nativní DB (jak tvrdí ORACLE), ale o tzv. xmlenabled DB. Způsoby uložení XML LOB, BFILE Obecný XML dokument (ukládán jako LOB) XML dokument odpovídající schématu (DTD, XML Schema) zde je využito mapování fragmentů XML dokumentu do relačního modelu. Při vytváření XMLTYPE sloupečku je zároveň vytvořeno schéma a při vkládání XML do tohoto sloupečku je proveden parsing dokumentu a jeho části jsou uloženy do takto vzniklého modelu. Naopak při dotazech (XPATH) není prohledáván celý LOB ale je opět využito tohoto modelu. Výhody možnost indexování, rychlejší vyhledávání Nevýhody jistá režije spjatá s mapováním XML, při dotazech vracejících fragmenty XML je nutná jejich rekonstrukce z relačního modelu, nesnadná změna XML Schématu

XMLTYPE Interní typ (object, TYPE) ORACLE Může být použit jako typ tabulky, sloupečku, jako datový typ v PL/SQL, při definici návratových hodnot, při definici sloupečků ve view CREATE TABLE orders OF XMLTYPE; CREATE TABLE orders2 (id number, order XMLTYPE); declare xml XMLTYPE; begin xml := xmltype('<?xml><book>...</book>'); end; /

XMLTYPE XMLTYPE s daným schématem 1 Pro ukládání XML dat, které odpovídají xml schematu je možno vytvořit XMLTYPE sloupeček na základě tohoto schématu. Každý vkládaný dokument je nejprve zvalidován a teprve potom může být uložen do sloupečku XML schéma je nutno nejprve zaregistrovat Nutný grant - XDBADMIN PROCEDURE DBMS_XMLSCHEMA.REGISTERSCHEMA Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SCHEMAURL VARCHAR2 SCHEMADOC URITYPE LOCAL BOOLEAN GENTYPES BOOLEAN GENBEAN BOOLEAN GENTABLES BOOLEAN FORCE BOOLEAN OWNER VARCHAR2 ENABLEHIERARCHY BINARY_INTEGER OPTIONS BINARY_INTEGER

XMLTYPE XMLTYPE s daným schématem 2 declare l_doc varchar2(4000) := '<?xml version="1.0" encoding="utf-8"?> <schema targetnamespace="http://akar.gtsgroup.cz/durian/phone/statement/statement" xmlns="http://www.w3.org/2001/xmlschema"> <element name="statement"> <complextype> <sequence> <element name="header"> <complextype> <sequence> <element maxoccurs="unbounded" ref="dpsr:request"/> </sequence> </complextype> </element> </schema>'; begin DBMS_XMLSCHEMA.registerSchema( SCHEMAURL => 'http://akar.gtsgroup.cz/durian/phone/statement/statement', SCHEMADOC => l_doc, GENTABLES => FALSE ); end; / CREATE TABLE request (id NUMBER not null, xml_request XMLType not null) XMLType COLUMN xml_request XMLSCHEMA "http://akar.gtsgroup.cz/durian/phone/statement/statement" ELEMENT "statement"; / Element se odkazuje na rootovský element XML dokumentu XMLSCHEMA se odkazuje na zaregistrované XML schéma

XMLTYPE XMLTYPE s daným schématem 3 CREATE TABLE purchaseorder_as_column ( id NUMBER, xml_document XMLType, UNIQUE (xml_document."xmldata"."reference"), FOREIGN KEY (xml_document."xmldata"."user") REFERENCES hr.employees (email)) XMLTYPE COLUMN xml_document XMLSCHEMA "http://xmlns.oracle.com/xdb/documentation/purchaseorder.xsd" ELEMENT "PurchaseOrder" VARRAY xml_document."xmldata"."actions"."action" STORE AS TABLE action_table2 ((PRIMARY KEY (NESTED_TABLE_ID, SYS_NC_ARRAY_INDEX$)) ORGANIZATION INDEX OVERFLOW) VARRAY xml_document."xmldata"."lineitems"."lineitem" STORE AS TABLE lineitem_table2 ((PRIMARY KEY (NESTED_TABLE_ID, SYS_NC_ARRAY_INDEX$)) ORGANIZATION INDEX OVERFLOW) LOB (xml_document."xmldata"."notes") STORE AS (TABLESPACE USERS ENABLE STORAGE IN ROW STORAGE(INITIAL 4K NEXT 32K));

XMLTYPE XMLTYPE s daným schématem 4 Na zrušení zaregistrovaného schématu slouží DBMS_XMLSCHEMA.deleteSchema Na změnu zaregistrovaného schématu slouží DBMS_XMLSCHEMA.copyEvolve

SQL fce pro manipulaci s XML 1 XMLTYPE, getxxxval XMLTYPE - vložení XML dokumentu do XMLTYPE sloupečku Nejčastěji pomocí metody XMLTYPE, která převádí varchar2, CLOB na XMLTYPE insert into xmltable(id, xmldoc) values (1, XMLTYPE('<?xml>...')); GetClobVal() - získání znakové (číselné) hodnoty z XMLTYPE (XML strom převede na zobrazitelnou formu) GetClobVal(), GetStringVal(), getnumberval() select xmldoc.getclobval() from xml_docs where id=12; RESULT ------------------------------------- <EMPLOYEES> <EMP> <EMPNO>112</EMPNO> <EMPNAME>Joe</EMPNAME> <SALARY>50000</SALARY> </EMP> <EMP> <EMPNO>217</EMPNO> <EMPNAME>Jane</EMPNAME> <SALARY>60000</SALARY> </EMP> </EMPLOYEES>

SQL fce pro manipulaci s XML 2 XMLElement, XMLAttributes Slouží k vytvoření fragmentu XML na základě vybraných dat SELECT XMLElement("Emp", XMLAttributes( e.employee_id as "ID", e.first_name ' ' e.last_name AS "name")) AS "RESULT" FROM hr.employees e WHERE employee_id > 200; RESULT ----------------------------------------------- <Emp ID="201" name="michael Hartstein"></Emp> <Emp ID="202" name="pat Fay"></Emp> <Emp ID="203" name="susan Mavris"></Emp> <Emp ID="204" name="hermann Baer"></Emp> <Emp ID="205" name="shelley Higgins"></Emp> <Emp ID="206" name="william Gietz"></Emp>

SQL fce pro manipulaci s XML 3 XMLForest Podobné jako XMLElement, umožňuje vybrat najednou více elemetů (les) SELECT XMLElement("Emp", XMLAttributes(e.first_name ' ' e.last_name AS "name"), XMLForest(e.hire_date, e.department AS "department")) AS "RESULT" FROM employees e WHERE e.department_id = 20; RESULT ------------------------------------- <Emp name="michael Hartstein"> <HIRE_DATE>1996-02-17</HIRE_DATE> <department>20</department> </Emp> <Emp name="pat Fay"> <HIRE_DATE>1997-08-17</HIRE_DATE> <department>20</department> </Emp>

SQL fce pro manipulaci s XML 4 XMLAGG agreguje (slučuje) více xml fragmentů do jednoho, umožňuje budovat strukturované XML dokumenty ze selektů SELECT XMLElement("Department", XMLAgg(XMLElement("Employee", e.job_id ' ' e.last_name) ORDER BY e.last_name)) AS "Dept_list" FROM hr.employees e WHERE e.department_id = 30 OR e.department_id = 40; Dept_list ------------------ <Department> <Employee>PU_CLERK Baida</Employee> <Employee>PU_CLERK Colmenares</Employee> <Employee>PU_CLERK Himuro</Employee> <Employee>PU_CLERK Khoo</Employee> <Employee>HR_REP Mavris</Employee> <Employee>PU_MAN Raphaely</Employee> <Employee>PU_CLERK Tobias</Employee> </Department>

SQL fce pro manipulaci s XML 5 extract, extractvalue, existsnode Extract vrací fragment XML dokumentu, který odpovídá XPATH výrazu ExtractValue podobně jako Extract, ale nevrací fragment ale maximálně jednu hodnotu, pokud XPATH výrazu odpovídá více elekemtů, atributů, je ohlášena chyba SELECT extract(object_value, '/PurchaseOrder/Reference') "REFERENCE" FROM purchaseorder REFERENCE ------------------------------------------------------------ <Reference>AMCEWEN-20021009123336271PDT</Reference> <Reference>SKING-20021009123336321PDT</Reference> SELECT extractvalue(object_value, '/PurchaseOrder/Reference') "REFERENCE" REFERENCE ------------------------------------------------------------ AMCEWEN-20021009123336271PDT 20021009123336321PDT

SQL fce pro manipulaci s XML 6 ExistsNode ExistsNode vrací 1, pokud v dokumentu existuje fragment, odpovídající XPATH výrazu SELECT OBJECT_VALUE FROM purchaseorder WHERE existsnode(object_value, '/PurchaseOrder[SpecialInstructions="Expedite"]') = 1; OBJECT_VALUE ---------------------------------------------------------------------------------- <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"

SQL fce pro manipulaci s XML 7 XMLSequence XMLSequence vrací colectionu XMLTYPů (pole proměnné velikosti). Nejčastější použití je společně s table. Operátor table z collection udělá něco jako virtuální tabulku, do které se můžeme odkazovat dalšími selekty SELECT value(t).getstringval() Attribute_Value FROM table(xmlsequence(extract(xmltype('<a><b>v1</b><b>v2</b><b>v3</b></a>'), '/A/B'))) T; ATTRIBUTE_VALUE ---------------------- <B>V1</B> <B>V2</B> <B>V3</B> SELECT value(em).getclobval() AS "XMLTYPE" FROM table(xmlsequence(cursor(select * FROM hr.employees WHERE employee_id = 104))) em; XMLTYPE -------------------------------------------------- <ROW> <EMPLOYEE_ID>104</EMPLOYEE_ID> <FIRST_NAME>Bruce</FIRST_NAME> <LAST_NAME>Ernst</LAST_NAME> <EMAIL>BERNST</EMAIL> <HIRE_DATE>21-MAY-91</HIRE_DATE> <SALARY>6000</SALARY> <MANAGER_ID>103</MANAGER_ID> <DEPARTMENT_ID>60</DEPARTMENT_ID> </ROW>

SQL fce pro manipulaci s XML 8 XMLConcat Fce s proměnným počtem argumentů, výsledkem je XML fragment, řetězící jednotlivé argumenty SELECT XMLConcat(XMLSequenceType( XMLType('<PartNo>1236</PartNo>'), XMLType('<PartName>Widget</PartName>'), XMLType('<PartPrice>29.99</PartPrice>'))).getClobVal() AS "RESULT" FROM DUAL; RESULT --------------- <PartNo>1236</PartNo><PartName>Widget</PartName><PartPrice>29.99</PartPrice> SELECT XMLConcat(XMLElement("first", e.first_name), XMLElement("last", e.last_name)) AS "RESULT" FROM employees e; RESULT -------------------------------------------- <first>den</first><last>raphaely</last> <first>alexander</first><last>khoo</last> <first>shelli</first><last>baida</last> <first>sigal</first><last>tobias</last> <first>guy</first><last>himuro</last> <first>karen</first><last>colmenares</last>

SQL fce pro manipulaci s XML 9 UPDATEXML Nahradí všechny části XML dokumentu, které odpovídají XPATH výrazu SELECT extract(object_value, '/PurchaseOrder/Actions/Action[1]') ACTION FROM purchaseorder WHERE existsnode(object_value, '/PurchaseOrder[Reference="SBELL-2002100912333601PDT"]') = 1; ACTION -------------------------------- <Action> <User>SVOLLMAN</User> </Action> UPDATE purchaseorder SET OBJECT_VALUE = updatexml(object_value, '/PurchaseOrder/Actions/Action[1]/User/text()', 'SKING') WHERE existsnode(object_value, '/PurchaseOrder[Reference="SBELL-2002100912333601PDT"]') = 1; SELECT extract(object_value, '/PurchaseOrder/Actions/Action[1]') ACTION FROM purchaseorder WHERE existsnode(object_value,'/purchaseorder[reference="sbell-2002100912333601pdt"]') = 1; ACTION --------------------------------- <Action> <User>SKING</User> </Action>

SQL fce pro manipulaci s XML 10 INSERTCHILDXMLL Vkládá nový element(y) či nový atribut pod otcovský element SELECT extract(object_value, '/PurchaseOrder/LineItems/LineItem[@ItemNumber="222"]') CHLD FROM purchaseorder WHERE existsnode(object_value, '/PurchaseOrder[Reference="AMCEWEN-20021009123336171PDT"]') = 1; CHLD ---------------------------------------------------------------------------- UPDATE purchaseorder SET OBJECT_VALUE = insertchildxml(object_value, '/PurchaseOrder/LineItems', 'LineItem', XMLType('<LineItem ItemNumber="222"> <Description>The Harder They Come</Description> <Part Id="953562951413" UnitPrice="22.95" Quantity="1"/> </LineItem>')) WHERE existsnode(object_value, '/PurchaseOrder[Reference="AMCEWEN-20021009123336171PDT"]') = 1; SELECT extract(object_value, '/PurchaseOrder/LineItems/LineItem[@ItemNumber="222"]') CHLD FROM purchaseorder WHERE existsnode(object_value, '/PurchaseOrder[Reference="AMCEWEN-20021009123336171PDT"]') = 1; CHLD ---------------------------------------------------------------------------- <LineItem ItemNumber="222"> <Description>The Harder They Come</Description> <Part Id="953562951413" UnitPrice="22.95" Quantity="1"/> </LineItem>

SQL fce pro manipulaci s XML 11 INSERTXMLBEFORE Vkládá nový element bezprostředně před element daný XPATH Výsledkem XPATH dotazu nesmí být atribut SELECT extract(object_value, '/PurchaseOrder/LineItems/LineItem[1]') CHLDS FROM purchaseorder WHERE existsnode(object_value, '/PurchaseOrder[Reference="AMCEWEN-20021009123336171PDT"]') = 1; CHLDS ------------------------------------------------------------ <LineItem ItemNumber="1"><Description>Salesman</Description><Part Id="37429158920" UnitPrice="39.95" Quantity="2"/></LineItem> UPDATE purchaseorder SET OBJECT_VALUE = insertxmlbefore(object_value, '/PurchaseOrder/LineItems/LineItem[1]',XMLType('<LineItem ItemNumber="314"> <Description>Brazil</Description> <Part Id="314159265359" UnitPrice="69.95" Quantity="2"/> </LineItem>')) WHERE existsnode(object_value,'/purchaseorder[reference="amcewen-20021009123336171pdt"]')= 1; SELECT extract(object_value, '/PurchaseOrder/LineItems/LineItem[position() <= 2]') CHLDS FROM purchaseorder WHERE existsnode(object_value, '/PurchaseOrder[Reference="AMCEWEN-0021009123336171PDT"]')= 1; CHLDS ------------------------------------------------------------------------ <LineItem ItemNumber="314"><Description>Brazil</Description><Part Id="314159265359" UnitPrice="69.95" Quantity="2"/></LineItem> <LineItem ItemNumber="1"><Description>Salesman</Description><Part Id="37429158920" UnitPrice="39.95" Quantity="2"/></LineItem>

SQL fce pro manipulaci s XML 10 XMLPI pro generovaní PI (process instrunctions) XMLComment generování komentářů XMLCDATA generování sekcí CDATA XMLROOT generování XML hlavičky <?xml version= 1.0 > XMLCOLATTVAL podobné jako XMLFOREST, elementy jsou brány jako hodnoty atributů, není třeba escapovat APPENDCHILDXML - vkládá fragment jako poslední dítě k elementu dle XPATH DELETEXML smaže cokoliv, co odpovídá XPATH

Indexování XMLTYPE Jednoduchý index založený na extractvalue XPATH výraz je přeložen na extractvalue, málo účinné, možnýpouze tehdy, pokud hledaný XPATH je max. 1X v dokumentu CREATE INDEX ipurchaseorder_rejectedby ON purchaseorder (extractvalue(object_value, '/PurchaseOrder/Reject/User')); B-tree index jako jednoduchý, místo extractvalue se použije Extract Funkční index používá se pro XMLTYPE uložený v CLOBu. Při manipulaci je zavolána příslušná fce (např. ExtractValue) může se tím např. kontrolovat duplicita CTX indexy možno kombinovat klasické kontextové indexy s XPATH výrazy, může vést k rychlejšímu vyhledávání, ale je třeba to chvíli ladit (spočítat statistiky tabulí, indexů,...)

XMTYPE a XSLT Zaregistrujeme XML schéma Vytvoříme tabulku s XMLTYPEm nad tímto schématem Vytvoříme dokument s transformací (což je XMLTYPE) a vložíme do nějaké jiné tabule, která má XMLTYPE sloupec SELECT XMLtransform(x.xmlcol, DBURIType('/XDB/STYLESHEET_TAB/ROW [ID=1]/STYLESHEET/text()').getXML()).getStringVal() AS result FROM po_tab x;

Zdroje informací ORACLE Documentation http://www.oracle.com/technology/documentation/index.html