xxml datu izgūšana no xmltype tipa kolonām web view · 2016-08-25xmlcast gives...

21
XXML datu izgūšana no XMLType tipa kolonām 1. XMLType metodes XML dokumenta izgūšanai dažādu datu tipu veidā: - getCLOBVal(); - getStringVal(); - getNumberVal(); - getBLOBVal(csid); 2. SQL funkciju izmantošana: - extract() atgriež elementu vai elementu kopu; - existsNode() nosaka vai attiecīgs elements vai dokumenta daļa eksistē (vērtība =1); - extractValue() atgriež elementa vērtību. 2. SQL/XML standarta funkcijas XMLQuery, XMLTable, XMLExists, and XMLCast. 3. SQL, PL/SQL vai Java valodu izmantošana. 4. XQuery valodas lietošana. 5. Oracle Text operatoru izmantošana XML dokumenta satura izgūšanai. 1

Upload: hatu

Post on 10-Mar-2018

215 views

Category:

Documents


1 download

TRANSCRIPT

XXML datu izgūšana no XMLType tipa kolonām

1. XMLType metodes XML dokumenta izgūšanai dažādu datu tipu veidā: - getCLOBVal();- getStringVal(); - getNumberVal();- getBLOBVal(csid);

2. SQL funkciju izmantošana:- extract() atgriež elementu vai elementu kopu;- existsNode() nosaka vai attiecīgs elements vai dokumenta daļa eksistē (vērtība =1);- extractValue() atgriež elementa vērtību.

2. SQL/XML standarta funkcijas XMLQuery, XMLTable, XMLExists, and XMLCast.

3. SQL, PL/SQL vai Java valodu izmantošana.

4. XQuery valodas lietošana.

5. Oracle Text operatoru izmantošana XML dokumenta satura izgūšanai.

1

XMLType tipa tabulas izveidošana un datu ielāde

create or replace directory XMLDIR as 'F:\XML_DOCS';

create table GRAMATVEIKALI of XMLType;

insert into GRAMATVEIKALI values (XMLType(bfilename('XMLDIR', 'gramatveikals.xml'), nls_charset_id('AL32UTF8')));

SET long 1000SET pages 500

select OBJECT_VALUE from GRAMATVEIKALI;OBJECT_VALUE----------------------------------------------------------------------------------------------------<?xml version="1.0" encoding="WINDOWS-1257"?><!-- New document created with EditiX at Fri Dec 02 17:23:04 EET 2011 --><gramatveikals> <gramata kategorija="Pavārgrāmatas"> <virsraksts valoda="latviešu">Biezpiena sacepums</virsraksts> <autors>Juris Kālis</autors> <gads>2005</gads> <cena>15.00</cena> </gramata> <gramata kategorija="Daiļliteratūra"> <virsraksts valoda="latviešu">Biezais sniegs</virsraksts> <autors>Anita Zemniece</autors> <gads>2008</gads> <cena>10.00</cena> </gramata></gramatveikals>

2

Lielā objekta datu tipa iegūšana vaicājumā

select x.OBJECT_VALUE.getCLOBVal('/gramatveikals/gramata/autors') from GRAMATVEIKALI x; X.OBJECT_VALUE.GETCLOBVAL()-------------------------------------------------------------------------<?xml version="1.0" encoding="WINDOWS-1257"?><!-- New document created with EditiX at Fri Dec 02 17:23:04 EET 2011 --><gramatveikals> <gramata kategorija="Pavārgrāmatas"> <virsraksts valoda="latviešu">Biezpiena sacepums</virsraksts> <autors>Juris Kālis</autors> <gads>2005</gads> <cena>15.00</cena> </gramata> <gramata kategorija="Daiļliteratūra"> <virsraksts valoda="latviešu">Biezais sniegs</virsraksts> <autors>Anita Zemniece</autors> <gads>2008</gads> <cena>10.00</cena> </gramata></gramatveikals>

3

Funkcija existsNode() noskaidro vai XPath norādei atbilst kaut viens elements, tad vērtība ir 1, citādi 0.

select OBJECT_VALUEfrom GRAMATVEIKALI where existsNode(OBJECT_VALUE, '/gramatveikals/gramata[autors="Anita Zemniece"]') = 1;OBJECT_VALUE-------------------------------------------------------------------------<?xml version="1.0" encoding="WINDOWS-1257"?><!-- New document created with EditiX at Fri Dec 02 17:23:04 EET 2011 --><gramatveikals> <gramata kategorija="Pavārgrāmatas"> <virsraksts valoda="latviešu">Biezpiena sacepums</virsraksts> <autors>Juris Kālis</autors> <gads>2005</gads> <cena>15.00</cena> </gramata> <gramata kategorija="Daiļliteratūra"> <virsraksts valoda="latviešu">Biezais sniegs</virsraksts> <autors>Anita Zemniece</autors> <gads>2008</gads> <cena>10.00</cena> </gramata></gramatveikals>

4

Funkcijas EXTRACT() izmantošana, lai iegūtu mezglu (node) vērtības (values)

select extract(OBJECT_VALUE, '/gramatveikals/gramata/virsraksts') "VIRSRAKSTI"from GRAMATVEIKALI;

VIRSRAKSTI-------------------------------------------------------------<virsraksts valoda="latviešu">Biezpiena sacepums</virsraksts><virsraksts valoda="latviešu">Biezais sniegs</virsraksts>

select extract(OBJECT_VALUE, '/gramatveikals/gramata[@kategorija="Pavārgrāmatas"]') "GRĀMATAS"from GRAMATVEIKALI;

GRĀMATAS---------------------------------------------------------------<gramata kategorija="Pavārgrāmatas"> <virsraksts valoda="latviešu">Biezpiena sacepums</virsraksts> <autors>Juris Kālis</autors> <gads>2005</gads> <cena>15.00</cena></gramata>

5

Funkcijas EXTRACT() izmantošana, lai iegūtu mezglu (node) vērtības (values)

select extract(OBJECT_VALUE, '/gramatveikals/gramata/autors[1]') "AUTORI"from GRAMATVEIKALI;

AUTORI--------------------------------<autors>Juris Kālis</autors><autors>Anita Zemniece</autors>

select extract(OBJECT_VALUE, '//gramata/virsraksts/text()') "GRAMATA"from GRAMATVEIKALIwhere existsNode(OBJECT_VALUE, '//gramata[autors="Juris Kālis"]') = 1;

GRAMATA---------------------------------Biezpiena sacepumsBiezais sniegs

select extract(OBJECT_VALUE, '/gramatveikals/gramata/virsraksts/text()') "VIRSRAKSTI"from GRAMATVEIKALIwhere existsNode(OBJECT_VALUE, '/gramatveikals/gramata/virsraksts[@valoda="latviešu"]') = 1;

VIRSRAKSTI--------------------------------Biezpiena sacepumsBiezais sniegs

6

Elementa vērtības

Atgriež tikai viena elementa vērtību, ja vaicājuma rezultātā tiek iegūtas vairākas vērtības – kļūda.SQL function extractValue takes as parameters an XMLType instance and an XPath expression that targets a node set.

select extractValue(OBJECT_VALUE, '/gramatveikals/gramata[autors="Juris Kālis"]/cena') "GRĀMATA"from GRAMATVEIKALI;

GRĀMATA------------------15.00

7

Funkcijas XMLExists() izmantošana XML dokumenta (node) atrašanai

XMLExists() funkcija noskaidro vai pieprasītais elements eksistē, tad vērtība ir TRUE.

select OBJECT_VALUEfrom GRAMATVEIKALIwhere XMLExists('/gramatveikals' PASSING by VALUE OBJECT_VALUE);

8

Funkcijas EXTRACT() izmantošana, lai iegūtu mezglu (node) vērtības (values)

select extract(OBJECT_VALUE, '/gramatveikals/gramata/virsraksts') "VIRSRAKSTI"from GRAMATVEIKALI;

VIRSRAKSTI-----------------------------------------------------------------------------<virsraksts valoda="latv">Itālijas virtuve</virsraksts><virsraksts valoda="latv">Pasakas</virsraksts><virsraksts valoda="latv">Vaicājumu valodas</virsraksts><virsraksts valoda="latv">Mācīsimies XML</virsraksts>

select extract(OBJECT_VALUE, '/gramatveikals/gramata[@kategorija="WEB"]') "GRĀMATAS"from GRAMATVEIKALI;

GRĀMATAS----------------------------------------------------------<gramata kategorija="WEB"> <virsraksts valoda="latv">Vaicājumu valodas</virsraksts> <autors>Juris Koks</autors> <autors>Zane Koks</autors> <autors>Varis Sakne</autors> <autors>Rasma Liepa</autors> <autors>Andris Osis</autors> <gads>2008</gads> <cena>25.00</cena></gramata><gramata kategorija="WEB"> <virsraksts valoda="latv">Mācīsimies XML</virsraksts> <autors>Anita Ozols</autors> <gads>2004</gads> <cena>35.00</cena></gramata>

9

Funkcijas EXTRACT() izmantošana, lai iegūtu mezglu (node) vērtības (values)

select extract(OBJECT_VALUE, '/gramatveikals/gramata/autors[2]') "AUTORI"from GRAMATVEIKALI;

AUTORI------------------------------------------<autors>Zane Koks</autors>

select extract(OBJECT_VALUE, '/gramatveikals/gramata/virsraksts') "GRAMATA"from GRAMATVEIKALIwhere existsNode(OBJECT_VALUE, '//gramata[autors="Jānis Ceļotājs"]') = 1;

GRAMATA------------------------------------------------------------------------------<virsraksts valoda="latv">Itālijas virtuve</virsraksts><virsraksts valoda="latv">Pasakas</virsraksts><virsraksts valoda="latv">Vaicājumu valodas</virsraksts><virsraksts valoda="latv">Mācīsimies XML</virsraksts>

select extract(OBJECT_VALUE, '/gramatveikals/gramata/virsraksts') "VIRSRAKSTI"from GRAMATVEIKALIwhere existsNode(OBJECT_VALUE, '/gramatveikals/gramata[@kategorija="BĒRNI"]') = 1;

VIRSRAKSTI--------------------------------------------------------<virsraksts valoda="latv">Itālijas virtuve</virsraksts><virsraksts valoda="latv">Pasakas</virsraksts><virsraksts valoda="latv">Vaicājumu valodas</virsraksts><virsraksts valoda="latv">Mācīsimies XML</virsraksts>

10

select extract(OBJECT_VALUE, '/gramatveikals/gramata') "GRAMATA"from GRAMATVEIKALIwhere existsNode(OBJECT_VALUE, '/gramatveikals/gramata[autors="Anita Ozols"]') = 1;

GRAMATA----------------------------------------------------------<gramata kategorija="ĒDINĀŠANA"> <virsraksts valoda="latv">Itālijas virtuve</virsraksts> <autors>Jānis Ceļotājs</autors> <gads>2005</gads> <cena>30.00</cena></gramata><gramata kategorija="BĒRNI"> <virsraksts valoda="latv">Pasakas</virsraksts> <autors>Antons Vecais</autors> <gads>2003</gads> <cena>15.00</cena></gramata><gramata kategorija="WEB"> <virsraksts valoda="latv">Vaicājumu valodas</virsraksts> <autors>Juris Koks</autors> <autors>Zane Koks</autors> <autors>Varis Sakne</autors> <autors>Rasma Liepa</autors> <autors>Andris Osis</autors> <gads>2008</gads> <cena>25.00</cena></gramata><gramata kategorija="WEB"> <virsraksts valoda="latv">Mācīsimies XML</virsraksts> <autors>Anita Ozols</autors> <gads>2004</gads> <cena>35.00</cena></gramata>

SQL function extractValue and XMLType method getStringVal() differ in their treatment of entity encoding. Function extractValue unescapes any encoded entities; method getStringVal() returns the data with entity encoding intact.

11

XMLCAST SQL Function

SQL/XML standard function XMLCast casts its first argument to the scalar SQL data type specified by its second argument. The first argument is a SQL expression that is evaluated. Data types NUMBER, VARCHAR2, and any of the date and time data types can be used as the second argument.Note:Unlike the SQL/XML standard, Oracle XML DB limits the use of XMLCast to cast XML to a SQL scalar data type; it does not support casting XML to XML or from a scalar SQL type to XML.The result of evaluating the first XMLCast argument is an XML value. It is converted to the target SQL data type by using the XQuery atomization process and then casting the XQuery atomic values to the target data type. If this conversion fails, then an error is raised. If conversion succeeds, the result returned is an instance of the target data type.Standard function XMLCast is similar to Oracle function extractValue, but it differs in that extractValue does not allow or require you to specify a target data type. In this, extractValue can sometimes be more convenient. XMLCast gives you the advantage of control over the data type, in addition to portability. If the SQL scalar data type cannot be determined at compile time, extractValue returns a value of time VARCHAR2(4000), which might not always be what you expect or want. You can work around this obstacle by using the SQL function cast, but XMLCast is a better choice in this case.

12

Example extracting the Scalar Value of an XML Fragment Using XMLCAST

This query extracts the scalar value of the Reference node.

select XMLCast(XMLQuery('/PurchaseOrder/Reference' PASSING OBJECT_VALUE RETURNING CONTENT)as VARCHAR2(100)) "REFERENCE"from purchaseorderwhere XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]' PASSING OBJECT_VALUE); REFERENCE-----------------------------------------------------AMCEWEN-20021009123336271PDTSKING-20021009123336321PDT. . .13 rows selected.

You can create function-based indexes using SQL function existsNode to speed up the execution. You can also create an XMLIndex index to help speed up arbitrary XPath searching.

13

Example extracting the Scalar Value of an XML Fragment Using EXTRACTVALUE

Atgriež tikai viena mezgla vērtību, ja vaicājuma rezultātā tiek iegūtas vairākas vērtības – kļūda.SQL function extractValue takes as parameters an XMLType instance and an XPath expression that targets a node set.

select extractValue(OBJECT_VALUE, '/gramatveikals/gramata/autors[5]') "GRĀMATA"from GRAMATVEIKALI;

GRĀMATA-----------------Andris Osis

select extractValue(OBJECT_VALUE, '/gramatveikals/gramata') "GRĀMATAS"from GRAMATVEIKALIwhere XMLExists('/gramatveikali/gramata[@kategorija="BĒRNI"]', PASSING OBJECT_VALUE);

Function extractValue and XMLType method getStringVal() differ in their treatment of entity encoding. Function extractValue unescapes any encoded entities; method getStringVal() returns the data with entity encoding intact.

14

XML datu izgūšana ar SQL

create or replace directory XMLDIR as '/oracle/FAILI_XML';

create table GRAMATVEIKALI of XMLType;

insert into GRAMATVEIKALI values (XMLType(bfilename('XMLDIR', 'gramatveikals1.xml'), nls_charset_id('AL32UTF8'))); insert into GRAMATVEIKALI values (XMLType(bfilename('XMLDIR', 'gramatveikals2.xml'), nls_charset_id('AL32UTF8')));

SET long 10000SET pages 5000

select extractValue(OBJECT_VALUE, '/gramatveikals/gramata/autors[3]') GRĀMATASfrom GRAMATVEIKALI;GRĀMATAS----------------Varis SakneRasma Celms

select extractValue(OBJECT_VALUE, '/gramatveikals/gramata/autors[3]') AUTORS, extractValue(OBJECT_VALUE, '/gramatveikals/gramata/autors[2]') AUTORSfrom GRAMATVEIKALI;AUTORS AUTORS----------------------------------------------Varis Sakne Zane KoksRasma Celms Zane Ozols

select extractValue(OBJECT_VALUE, '/gramatveikals/gramata/autors[3]') AUTORSfrom GRAMATVEIKALIwhere existsNode(OBJECT_VALUE,'//cena') = 1order by extractValue(OBJECT_VALUE,'/gramatveikals/gramata/autors[3]');AUTORS-------------------Rasma CelmsVaris Sakne

15