IBM DB2 9.7
Linux f" UNIX fM Windows f
pureXML 8O
S151-1180-00
IBM DB2 9.7
Linux f" UNIX fM Windows f
pureXML 8O
S151-1180-00
"b
9CKE"0d'VDz 70,k HDAZ 447 3 D=< E, :yw ; BD#f E"#
^)fyw
K D5|, IBM D yP(E"# | ZmI -iPa),R\f(( D #$# > vfoP|,DE"; | (TNNz7D
#$,Ra)DNNod<;h* gKbM#
zIZ_r(}1XD IBM zm&) : IBM vfo#
v *Z_):
vfo,k*A IBM vfoPD,x 7 *:www.ibm.com/shop/publications/order
v *iR1XD IBM zm &,k*A IBM + r*5K?< ,x7* :www.ibm.com/planetwide
*S@zrSC sD DB2 P!Mz [?): DB2 vfo,kB g 1-800-IBM-4YOU(426-4968)#
1 zr IBM "ME "1,4,b Z h IBM @;^ ~ D (&T
|O*J1R;aTzlI NN0lD==9 CrV" C
E"#
© Copyright International Business Machines Corporation 2006, 2009.
?<
XZ>i ..............vii
Z 1 B pureXML Ev - DB2 w*
XML }]b .............1
XML }]`M ..............3
XML dkM dvE v ...........3
H O XML #MMX5 # M .........7
XQuery M XPath }]#M .........8
r PMn...............8
-S5 ...............9
ZccN a9 .............10
ZctT ..............11
ZcV` ..............12
ZcD D53r ............14
Zcj6 ..............14
ZcD `M5MV{. 5 .........15
'V XML D$_ ............15
pureXML D*O'V ...........17
pureXML D4F
X Z XML 'VDDB...........17
M B~"<'V .......17
Z 2 B pureXML LL ........19
NL 1:4( ITf" XML }]D DB2 }] bM
m .................20
NL 2:4(yZ XML }]Dw} ......20
NL 3:+ XML D5ek = XML `MPP ...21
NL 4:|Bf" Z XML PPD XML D5 ...22
NL 5:> } XML }] ..........23
NL 6:i/ XML }] ..........24
NL 7:kT XML #=i$ XML D
NL 8:9C XSLT y=mxP d; ......29
5 ....27
Z 3 B XML f"w .........33
XML f"Ts .............33
XML y >mP f"w ...........33
XML D 5Df"*s ...........34
Z 4 B ek XML }] .......37
4 (_P XML PDm...........37
+ XML PmSAVPm ..........38
e k= XML PP ............38
XML bv ...............39
XML }]j{T ............43
XML PDli<x ...........43
XML }]D%"w &m .........45
XML i$ ..............46
XSR_GET_PARSING_DIAGNOSTICS f" }L ..49
T > j8 D XML bvMi$m s ......51
v?Dms{" 'V D ErrorLog XML #=(e 53
ZG Unicode }]bP 9C
XML.......56
Z 5 B i/ XML }] .......61
XQuery ri ..............61
9C XQuery / }lw DB2 }] .......62
9C SQL i/ XML }]ri ........63
XQuery k SQL DHO ..........64
HOCZ i/ XML }]D=(........64
8( XML {FUd ...........65
> }:|D *XD{FUd0: ........67
XMLQUERY /}E v ...........69
XMLQUERY 5XD GUrP .......69
XMLQUERY 5XDUrP ........70
+ XMLQUERY a {D}]`M*;*
`M ................71
} ]`M.dD? F *; .........72
XMLQUERY.............79
XMLTABLE /}E v ...........82
>}:ek XMLTABLE P5XD 5 .....83
>}: 9C XMLTABLE T3nD?v 5}5X;
P ................84
>}: 9C XMLTABLE &m XML D5P`v
wy|,D* X ............85
>}: 9C XMLTABLE &mVc }] ....87
XMLTABLE.............89
i / XML }] 1 D XMLEXISTS =J
XMLEXISTS =JC> ..........93
XMLEXISTS =J ...........94
Z SQL od k XQuery mo=.d + ]N} ...96
+]A XMLEXISTS M XMLQUERY D#?MN
}jG ...............96
9C XMLEXISTS"XMLQUERY r XMLTABLE
+]D r%P{ ............97
+ N}S XQuery + ]A SQL.......99
9C XQuery lw }]...........99
CZ %dw}ki/D<rEv .......101
w}(eD^F............102
8( text() Zc1
V f5D}]`M ...........105
,S=J*; ............105
# }i/s5 ............107
XML D5P D+ D> Qw .........108
+ XML PPD}]lw A O gf>D DB2 M'z 108
CZ 9l XML 5D SQL/XML "</} ....109
"< XML 5D>} ..........110
9 C XSLT y = mxP d ; .......114
SQL/XML "</}PDX bV {&
XML rP/ .............123
f" Mlw s XML D5P D np .....125
i 5 XML D 5D }]`M ........126
D"bBn .......104
G XML
.....92
m ....122
Z 6 B * XML }]("w} ....127
w } XML #=mo = ..........128
© Copyright IBM Corp. 2006, 2009 iii
XML {FUdy w ...........129
k w} XML #=mo = X*D } ]`M ....130
y Z XML }]Dw} D } ]`M* ; .....131
^' XML 5 ............132
D5b\r CREATE INDEX o d'\ ....134
X Z*;*w} XML }]`MD \ am ...134
XML #=Mw}|zI ..........135
UNIQUE X|Voe ...........136
k * XML }]("w}`
y Z XML }]D_-w}Mom w } ....137
k XML PX *Dd{}]bTs .....138
X B4(yZ XML }]Dw} ......139
CREATE INDEX ............139
k TyZ XML }]Dw} D y>i / .....156
TyZ XML }]Dw} D^F .......158
#{ XML ("w}Jb .........160
o O INSERT r UPDATE od"
SQL20305N {" ...........160
o O CREATE INDEX od T ndDm" v D
SQL20306N {" ...........162
X *D}]bTs ...137
vD
Z 7 B |B XML }] .......165
Z d;m o=P 9 C|BYw ........166
9Cd{mPDE"| B XML D 5 ......169
S mP>} XML }] ..........170
Z 8 B XML #=f"b .......171
XSR Ts ..............171
XSR Ts"a .............171
(}f" }L"a XSR Ts .......172
(}|nP&mw"a XSR Ts ......173
T XML #="aM>}D Java ' V ....174
D d"aD XSR Ts ..........176
]x XML #= ...........176
]x XML #=Df]T*s .......176
= 8:]x XML #= .........183
i! XML #=E"D >} .........185
P>Qr XSR
lwQr XSR "aD XML #= D yPiI?
V ................185
lw XML D5D XML #= .......186
"aD XML #= .....185
Z 9 B XML }]F/ .......187
PXF/ XML }]DX *"bBn ......188
i/M XPath }]#M ..........189
< kM < v1 D LOB M XML D~P * ....189
XML }]5w{ ............190
<v XML }] ............191
<k XML }] ............193
0k XML }] ............194
b v0k XML } ] 1"zD ("w}ms . . 195
Z 10 B &CLr` L oT'V ....203
CLI.................204
CLI &C LrPD XML }]&m - E v . . 204
CLI &C LrPD XML PekM|B ....205
Z CLI &C LrPlw XML }] .....206
|D CLI &CLrPD1! XML `M& m . . 206
6 k= SQL..............207
Z 6k= SQL &C LrPyw XML w d? 207
>}:}C6k = SQL &C LrPD XML w
d? ...............208
4P6k=
X Z9 C XML M XQuery *"6k= SQL &
CLrD(i ............211
j 6 SQLDA PD XML 5 .......211
Java ................211
JDBC...............211
SQLJ...............219
PHP ................223
IBM }]~qwD PHP &C Lr*" ....223
9 C PHP &C Lrlw XML } ] .....224
PHP BXM `XJ4 ..........224
Perl .................224
pureXML M Perl ...........224
Perl PD}]b,S ..........227
Perl ^F ..............228
} L ................228
SQL }L ..............228
SQL /} ..............230
b ?}L ..............232
}LDT\ .............246
y >&C Lr .............251
pureXML y> ............251
pureXML - \my> .........252
pureXML - &C Lr*"y> ......254
SQL &CLrPD XQuery mo= 209
Z 11 B XML T\ .........261
pureXML &\?~M}]i/=8 ......261
Z Vx}]b7 3 P 9 C XQuery d;D > } ...261
+QywY1mk XML }]dO 9C .....263
+E/<r k XML }]M XQuery mo =dO 9
C .................265
9 C XML } ]DE/<r D > } .....266
CZ pureXML }] f"T\D DMS mUdDW!
n .................271
Z 12 B XML }]`k .......273
Z?`kD XML }] ..........273
f"r+] XML }] 1D`k"b Bn ....274
+ XML }] dk }]b 1D`k"b Bn . . 274
S}]bPlw XML }] 1D`k"b Bn 274
Z }LN}P+] XML } ] 1 D`k"b B n 275
JDBC"SQLJ M .NET &C LrPD XML }]
`k"bBn
XML `kMrP/TZ}]* ;D0l .....276
`kiv:+Z? `kD XML }] dk =}]
bP ...............276
` kiv:+b? ` kD XML }] d k = }]
bP ...............277
` kiv:(}~=DrP/Yw4lw XML
}] ...............279
............275
iv pureXML 8O
` kiv:9CT = D XMLSERIALIZE 4lw
XML }] .............281
3 dZ?`kD XML }]M CCSID .....283
+ `k{3dAQf" D XML }] D P '
CCSID ...............283
+ CCSID 3dArP/ XML dv } ]D`k
{ ................295
Z 13 B x"M D XML #=Vb ...301
x "MD XML # = VbDE c .......301
9Cx" MD XML # =4Vb XML D5 ...301
"a XML #= "Tdt CVb ......302
`v XML D5Vb>} ........303
x "MD XML # = VbM]i XML D 5 . . 303
{Cx"MD XML # =V b ........308
CZ x"MD# = VbD xdbDecompXML }L . . 309
DECOMPOSEXMLDOCUMENT.......312
x"MD# =Vb
XDB_DECOMP_XML_FROM_QUERY f" }L . . 313
XML Vb"M .............316
XML Vb"M - f 6Mw Cr ......316
XML Vb"M - \a .........317
db2-xdb:defaultSQLSchema Vb"M .....318
db2-xdb:rowSet Vb"M .........319
db2-xdb:table Vb"M .........323
db2-xdb:column Vb"M ........326
db2-xdb:locationPath Vb"M .......328
db2-xdb:expression Vb"M ........331
db2-xdb:condition Vb"M ........334
db2-xdb:contentHandling Vb"M ......337
db2-xdb:normalization Vb"M .......341
db2-xdb:order Vb"M .........343
db2-xdb:truncate Vb"M ........345
db2-xdb:rowSetMapping V
db2-xdb:rowSetOperationOrder Vb"M ....350
x"MD XML # =VbDX| V .....351
x"MD XML # =VbPgNNI Vba { ...352
T XML Vba {xPi$DwC .....353
x "MD XML # = VbPT CDATA ? V D &
m ................353
x"MD XML # =VbPDU 5MU V{ . 354
CZ x"MD XML #=V
* xPx"MD XML # = V b xT IzD4S
`MmSD"M............355
Vb&\D XML #= 9l (i ......358
x"MD XML # =VbPD3d >} .....359
x"MD XML # =VbPDP/ .....359
Vb"M> }:3dA XML P ......362
Vb"M> }:;v53d A% v
Vb"M> }:;v53d A% vmazz` vP 364
Vb"M> }:;v53d A` vm .....366
Vb"M> }: +3dA%vm D`v 5 xP Vi 367
Vb"M> }: +;,OBDPD`v 53 dA%
vm ...............369
x"MD# =VbD
x"MD XML # =VbD^F .......374
D
b"M ......347
bDKTm .....355
m azz%vP 363
XML #== SQL `Mf] T 370
x "MD XML # = VbDJOo O "bBn ...376
XML Vb"MD# = ...........377
Z 14 B T pureXML D^F ....379
T pureXML &\D^F ..........379
=< A. ` k3d ..........383
+`k{3dAQf" D XML }] D P' CCSID 383
+ CCSID 3dArP/ XML dv }]D`k{ 394
=< B. SQL/XML "</} .....399
XMLAGG...............399
XMLATTRIBUTES............400
XMLCOMMENT ............401
XMLCONCAT.............402
XMLDOCUMENT............403
XMLELEMENT .............404
XMLFOREST .............408
XMLGROUP..............411
XMLNAMESPACES ...........413
XMLPI ...............415
XMLROW..............416
XMLTEXT ..............418
XSLTRANSFORM ............419
=< C. XSR f"}LM|n .....423
XSR f"}L .............423
XSR_REGISTER ...........423
XSR_ADDSCHEMADOC.........424
XSR_COMPLETE ...........425
XSR_DTD .............426
XSR_EXTENTITY ...........427
XSR_UPDATE ............428
XSR |n ..............430
REGISTER XMLSCHEMA ........430
ADD XMLSCHEMA DOCUMENT .....431
COMPLETE XMLSCHEMA ........432
REGISTER XSROBJECT .........433
UPDATE XMLSCHEMA .........435
=< D. DB2 <uE" Ev ......437
2=4r PDF q=D DB2 < u b ......437
):!"fD DB2 i. ..........440
S|nP &mwT> SQL 4,oz ......441
CJ;,f>D DB2 E"P D .......441
Z DB2 E"P DPTzDW!o TT> wb ...441
| B20ZzDFczr Z ?x~qwOD DB2 E
"PD................442
V/|B20Z
DB2 E"P D .............443
DB2 LL ...............444
DB2 J OoOE" ............445
u nM u ~ ..............445
zDFczr Z?x~qwOD
=< E. yw ............447
?< v
w } ...............451
vi
pureXML 8O
XZ>i
pureXML™8 OhvgNZ DB2 ®} ]bP9C XML } ]#|+f_zPX XML }
]`MM XML f" wD*6,g N9C SQL M XQuery oT 49C XML } ],
T 0gN*T\("w } XML }]#d{wb|( pureXML &C Lr"9, } ] F
/ MQ XML }]Vb*`Xq = #
© Copyright IBM Corp. 2006, 2009 vii
viii pureXML 8O
Z 1 B pureXML Ev - DB2 w* XML }]b
pureXML &\?~Jm z+q=<CD XML D5f" Z_P XML }]`MD }]
b mPP#(}+ XML }]f" Z XML PP, } ]I#Vd>zVca9N=,x
;G+dw*D >f" r3d* d{ }]#M#
r* pureXML }]f" Qj+/I,y TI{CV P DB2
M\mf" D XML }]#
+ XML }]Td>zVc a 9N=4f" IT 9 XML DQw "lwM| B' J|
_#XQuery "SQL rOv~_DiOICZ i/ M |B XML }]#5X XML }]
r IC XML Td?D SQL /}(F* SQL/XML / }) 9 \y]
5 49lr"< XML }]#
}]b~qw&\4 CJ
S }]bPlwD
i/M|B
I9CBP=( i/M|Bf" Z XML PPD XML D 5:
XQuery
XQuery GCZ b M"lwM^Di/ XML }]D(Co T# DB2 }]b~
q wJm1SwC XQuery rS SQL w C XQuery#r * XML }]f" Z
DB2 mMS<P,yTa)K ;) /}, CZ(}1S |{mrS< r(}
( SQL i/S8 (DmMS<Pi! XML }]#XQuery 'Vw V CZ &m
XML }]"|B*XMtT.`D XML TsM9lB XML Ts Dmo=#
XQuery D`LSZa)K`FZ SQL D&\,CZ 4Pi/ "lwa {#
SQL odM SQL/XML /}
m` SQL od'V XML }
{ }]bYw,}g ,4( _ P XML PDm"+ XML P m S AVPm"4
(yZ XML PDw}"T_ P XML PDm4 (%"wT0ek"|Br>
} XML D5# DB2 }]b~qw' V D;i SQL/XML /}"mo =
6{C XML }] `M#
] `M#b9Cz\ ;T XML } ] 4Pm `#
8
Mf
ITS SQL i/PwC XQuery #Zb Vi vB,SQL i/IT+}]Ts(
d?DN=+ ]A XQuery#
&CLr*"
m``LoT(} SQL M b?} La)K T&C L r*"D'V:
`LoT' V
TBD pureXML &\ D&CL r*"'V9C&C L r\;iO XML M X
5}]DCJMf" # BP`LoT' V XML }]`M:
v C r C++(6k= SQL r DB2 CLI)
v COBOL
™
v Java
v C# M Visual Basic(IBM
v PHP
© Copyright IBM Corp. 2006, 2009 1
(JDBC r SQLJ)
®
} ]~qw .NET a)Lr)
v Perl
SQL Mb?}L
(}Z CREATE PROCEDURE N}Xw{P|, XML } ]`M N },I+
XML }]+]A SQL }LMb? }L#VPD }L &\'V'F SQL od
5 V}L_-w,|Gzzr{C XML 5T 0 d?PD XML } ]5Y 1 f
"w#
\m
pureXML &\a )CZ \ m XML D 5D URI @5X5D f"b"Jm CZ}]b\
mD XML }]F/:
XML #=f" b( XSR)
XML #=f" b( XSR )GCZ fEZ & m XML PPf" D XML 5}D
51yh DyP XML $~ Df" b#|f" XML D 5P}C D XML #
="DTD Mb? 5e#
<k" <vM0k5C Lr
<k" <vM0k5C LrQ| B*' V>z XML }]`M#b ) 5C Lr
s &m LOB }];y 4 & m XML }]:b=V ` MD}]< f" Z5JD
m .b#Q|BD db2Import "db2Export M db2Load API 9a)KCZ < k"
<vM0k XML }
f" Z XML PPD XML D5}],b`FZTX5 } ] D }]F/'V#
]D&C Lr*"' V#b)Q| B D5CLrJ mF/
T\
9Cf" Z XML PPD XML D5 1,I 9Ca_T\D& \?~:
yZ XML }]Dw}
Tf" Z XML PPD}]a) Kw}'V#9Cy Z XML }]D w}Ia
_ kT XML D5"vDi/ D 'J#kX5w}`F,XML }] w }TP(
"w}# +G,
w };GT?VP(" w }#(}8( XML #=( | G\^D XPath mo
=),I8w*T XML PDD)?V( "w }#
E /w |BKE/w,T'VkT XML }]MX5 } ] T SQL /}"XQuery
M6kK XQuery D SQL/XML /}xPs5#E/wI C(} XML }]T
0 4TyZ XML }]Dw} D } ]y U / D3 F E"zIP 'Di/4 P F
.#
5wM Visual Explain
Q |B5wh)M Visual Explain GUI $_, T c'VCZ i/ XML }]D
SQL v?&\"'V XQuery mo=#
_ Db)| B J m zlYi 4 DB2 } ] b~qwkT XML } ] Ti/o d
xPs5D==#
|GDxpZZX5 w}GT{vP(" w},xXML }]
T5wh)M Visual Explain GUI $
$_
/}
2 pureXML 8O
;)$_'V XML }]`M,b )$ _|(XFP D"|nP&mw"IBM Data Stu-
dio M DB2 Development Add-In for Microsoft
®
Visual Studio .NET#
XML }]`M
x "MD XML # = Vb
pureXML 9z\ ;+ICV cq =D XML }]w* XML f" MCJ,+P1I\
h *+ XML }]w*X5 } ]4CJ#x" M D XML #=V b y] XML #=P
8(D"M4VbD 5#
K }]`MCZ (emPf" XML 5 DP,b) P P f" DyP XML 5 X kGq=
<CD XML D 5#}kK>z XML }]`M\;+q = <CD XML D 5f" Z
}]bPd{X5 }]T_D >zVcq =P#
9CZ?m >4& m XML 5,Z?m >;GV
O #(}9C XMLSERIALIZE / } r + XML 5s( A `M* XML "V{.r~ x
FD&C Lrd?,IT+ XML 5d;I m> XML D5D QrP/V{. 5#,
y ,(}9C XMLPARSE / } r+&CLrV{."~xFr XML &C Lr
(A XML 5,IT+m> XML D5D V{. 5d;* XML 5#Zf0 XML P
D SQL }]|D o d (g INSERT )P ,(} 9 CQek D XMLPARSE /}+m >
XML D5D V{.r~xF5 d ;I XML 5#k&C LrV{.M~x F}]`M
;;1,IT~ = bvrrP /
Z a9OT}]bPD XML 5 Ds!;P^ F #+ G ,k"b ,k DB2 } ]b~q
w ;;DQrP / XML }]Ds!^F* 2GB #
I9C SQL }]Ywo dek"|BM>} XML D5 #XML # =f" b(XSR )
'V(#Zekr|BZdkT XML
K CZ 9lMi/ XML 5T0<v M <k XML }] D zF#ITT XML P (e
XML }]w},SxDF XML }]DQw T\#IT(}wV&C L rSZ +mr
S <PPD XML } ]w*QrP/D V {. } ]lw
XML dkM dvE v
DB2 }]b~qw CZ\m X5}]M XML } ] , |a ) K w V =(4 d k M dv
XML D5#
{.,"R ;\1SkV{.5xPH
`Ms
XML 5#
# =i$ XML D5# DB2 } ]b539a)
#
XML D5 f"Z(e* XML }]`MDPP#;v XML PPD?;P< f"%v
q=<CD XML D 5#f" DD 5Vc#f, "R#tK XML }]#M;D5 4f
"*D >
I TZ|,d{`MDP(b) P #fX5}])DmP(e XML P;I T *%vm
(e `v XML P#
r3dAm;}]#M#
dk
Z 4 3 D< 1 T>KICZ + XML }]Ek }]b5 3P DwV=( #
Z 1 B pureXML Ev 3
4 pureXML 8O
<1.CZdk
XML
}]D=(
9CD dk=( !vZ*jID Nq:
ekr|B
I9C INSERT SQL od+q =<CDD 5ek = XML PP#g{\ ;I
&VvD 5,G45 wD 5Dq=<C#Z4Pekr |BYw ZdG qi$
XML D5G I! D #g{ 4Pi $ ,G 4XkW Hr XML #= f"b
(XSR )"a XML #=#D5 G9C UPDATE SQL odr 9C XQuery |
Bmo=| BD#
x"MD XML # =Vb
I 9Cx" M D XML # = Vb4 V b XML D5P D } ],r_+C } ]f
"ZX5PM XML
P P#Vbay]mS A XML #=D5D " M + } ]f
"ZPP#b)"M+ XML D5 PD}]3d Am P#
V b&\y}CD XML # =D5f"Z XML # =f"b(XSR )P#
<k I9C<k 5CLr+ XML D5< k= XML PP#Z < k XML D5 1G
qxP
i $GI !D #g{4 P i $,G4XkWHr XML # =f" b
(XSR )"ai$D51y 9C D XML #=#
XML #=f" b( XSR)"a
XML #=f" b( XSR)f"CZ i$rVb XML D5D XML #=#*
T @5Zb)#=D XML D 5 4 P d{Nq,(# h * H"
a XML #=#
XML #=G9 Cf" }Lr|nr XSR "aD#
dv
Z 6 3 D< 2 T>KICZ S }]b 5 3Plw XML }] DwV=( #
Z 1 B pureXML Ev 5
6 pureXML 8O
<2.CZdv
XML
}]D=(
9CD dv=( !vZ*j IDNq:
XQuery
XQuery G;VI CZZ XML D5ZxPi/DoT#|zcKi/a9d/
G #sD XML }] D X(hs,ki/a9I$ b D X5}] G ;, D #
XQuery ITT:wCT:,2IT(} XQuery /} db2-fn:xmlcolumn M db2-
fn:sqlquery w C
SQL 4 i/ f"Z DB2 } ]b PD XML# db2-
fn:xmlcolumn +lw{v XML P,x db2-fn:sqlquery +lwyZ SQL +i
/ D XML 5#
SQL 19C SQL +i/4 i / XML } ] 1 ,+ZP6p x Pi/#rK ,Ci
/;\5X{v XML D5;vv 9C SQL G;I \5X XML D5|, D
,ND#
* Z XML D5ZxPi/,X k 9C XQuery#I T 9C SQL/
XML /} XMLQUERY r XMLTABLE r_9C XMLEXISTS =J"(}
w C SQL 4 w C XQuery#XMLQUERY /}+ XQuery mo = Da{T XML
r P N =5X#XMLTABLE / } + XQuery mo = Da{Tm D N =5X#
XMLEXISTS SQL =J7( XQuery mo=G qa 5X GUrP#
9 I9CtI"</ } (}f" Z DB2 } ] b ~qwPD XML }]49l
XML 5#9Cb)"</ }9lD XML 5;XGq =<CD XML D5#
< v I9C<v 5 CLrS XML PP< v XML D5#Q < v D XML } ]kw
}]D~P|,DQ <vDX5}]f" Z;,;C#PX?vQ<v D XML
D 5Dj8 E";P1Sf" ZQ<v D w }] D ~P#Z w }] D ~P,b
)j8E"GI XML }
HO XML #MMX5 #M
h F}]b 1 ,h*7( } ]| J O XML #M9 G X5#M# h FI{C DB2 }
]bDlOX c,4 ,,1Z;v } ]bP' VX5} ]M XML } ]D\;#
d;>V[bMKb =v#M.dD w*x pT0JCZ ?v#MD r X,+9P\
`rXIozz!qnOJD 5V#+>V[ w* ;v<r,KbI\a0lX (5
VDyPr X#
XML }]kX5 }].dD w*xp
XML }] GVc }];X5 }]C_-X5#Mm >
XML D5TcNa9N=|,PX}]n.dDX5 DE"#TZX5#M,
IT(eD( ;X5`MG8mMS tm X5#
]5w{(XDS )m>D#
XML }]\;Th v;xX5 }];\
XML D5;v|,}]
T P;,`MD}]#T Z X5#M,}]D Z ] I d P( e (e #PPDy
P}]Xk G`,`MD }] #
XML }]_ PL(Er; xX5 }];P
TZ XML D5,Y (8 (D}]n
=( 48(D5ZD3r#TZX5}],}GT;Pr` P 8( ORDER BY
S d,qr;\#$PD3 r #
,9|,PXCZ 5w}]DEn DjG#%vD5I
3rGD5P }]D 3r#(#;Pd {
0l}]#M!qDrX
f" D}]V`Io z z7( f" ==#}g,g { } ]lz G V cRThvD,G
4IT+|f" * XML }]#+ G,d { rX 2 I\a0l zv(*9CD #M#
h*nsin T1
X5mq-G# OqD#M#}g,+; v m f6/*
f6/*;vmI\G#'Q#g{-#|D } ]hF,G4+|m>* XML
}] GOCD!q#}g,XML # =If 1d]x#
}]lwh*nC T\ 1
r P/MbM XML } ] a zz; )*z#g{ T \Hin T |
5}]I\ GOCD!q#
m `mr+ m `m4r
X*,G4X
}]Tsw*X5 }]&m 1
g{T}]Dsx&m !vZ*f" ZX5} ]bPD} ] ,G49CVb+
?V}]w*X5 }]f" I\OO J#+*z Vv&m(OLAP )&CZ }
Z 1 B pureXML Ev 7
] VbPD} ]M Gby;v > }#Kb,g{h*+T XML D5D d{ &
mw*;v{e,G4Z bVivB,OOJD=( G +? V}] w*X5}
]f" "f" {v XML D5#
}]i~ZcNa9b _Pbe 1
}]>mI\PL PDVcq =
)%I\|,?~E#nC+xP?~EDI:)%T XML D 5D N=m > #
+G,?v?~E<P; vk|X* D?~hv#nC + ?~hv|(ZX5
m P,r*?~EM ? ~hv .dDX
%^X#
}] tT JCZ yP }],rv JCZ ;!?V }] 1
;)}]/I\Ps? t T ,+;P ;!?Vt T JCZ N NX( } ]5#}
g,Zc[?<P ,I\Pm`}] t T ,} g,s! "
y ="/( "g4hsr<O h s # TZC?<PDN N x (n,;P;?V
tT`X:g4 hsTZgb Pbe ,+ TZ:;Pbe #\Q CX 5# Mm
>MQw bV`MD}],+9C XML #M4m >MQw M`T*]
}]4STk]?.HO _ 1
Z m`ivB,Y?}]P|, K _ H a9/D E "# 9CX 5 # M m>C }
]+f04SDGM #=, Z C#=P? v,m, SAm` v,m,"Rd P
s `}m;PY?P# m > K }]D;V
m,"RTC m4(S<,?v S< m>;v,#
,+Si ~;h*8i ~a)5#}g ,I:
5Z_-Ok9 Cb)? ~EDI:)
OC=(G9 C_ P XML PD% v
U+"X? "DO "
W;)#
h*} Cj{ T1
;\+ XML P(e* }C<xD ; ?V#rK,g{ XML D5P D5h *
Nk} C<x,G4 &+}]w*X5 }]f" #
h*-#| B}] 1
\ (}f;{vD54 | B XML PPD XML }]#g { h*51| B G
;
# sDD 5 PO!,NZ|, D s ?P,G4+}] f" ZG XML PPI\
a 'J|_ #+G,g{}Z| B DD 5 \ !"R;N;| B Y?D5,G4
w* XML }]f" 'J
XQuery M XPath }]#M
XQuery mo=T XQuery M XPath }]#M( XDM )D5}xPKc"5X } ]#
MD5}#XDM GT;vr `v XML D 5r,N Dis m># }]# Ma(e
XQuery PDmo= D Jm 5 ,|( P dF cZd9CD 5 #
+ XML }] bv* XDM ,"Z XQuery &m}].0k
z I}]#MZd,+b vdk XML D5,"+|*; * XDM D 5 }#ZbvD 5
1,ITxPi$ ,2I T;xPi$#
XDM G4U-S5MZcrP4 x Ph v D#
2a\_#
T#=4i$b) }]#Z
rPMn
8 pureXML 8O
XQuery M XPath }]#M( XDM)D5}*rP#
n
O #;v
;vrPI T|,Zc"-S5r_G Zc M-S5DN biO#}g,BfPmP
D ?vu?<G; v rP:
MG;v-S5r ;vZc#
rP
G 0 vnr` v nDPr/
v 36
v <dog/>
v (2, 3, 4)
v (36, <dog/>, "cat")
v ()
}PmPDu? .b,f" Z DB2 }]bD XML PPD XML D 5G;vr P#
>}PC 4m >rPDm >(,kC 49l XQuery PDrP Do (G;BD:
v rPPD?n .dC:EVt#
v {vrPGC2(E (p 4D#
v ;TUD2(Em> ;vUrP#
v g{;vnZ|TmO =v V,G4 `1Z ;v;|, ;nDrP#
}g,rP (36) k-S5 36 ;Pxp#
;\TrPx P 6W#1iO=v r P1,qCD a{ < U G ZcM-S5 D =L r
P#}g
*v;avV6WrP,yT ,iOb )rP1 ";azI (3, 5, 6, (2, 3))#
;|,N NnDrPF*
,+rP (2, 3) 7SA rP (3, 5, 6) 1 +zI%vrP (3, 5, 6, 2, 3)#r
UrP
# I9C U rP4m>1YD E "r4* E " #
-S5
-S5
String"Integer"Decimal"Date Md{-S`M#b ) `M<;hv* -S`M, -r
G|G^(Y8 VK#
k Zc;,D G,-S5; P j6#-S5D?v5}(} g,
?v5}<j+` ,#
BP>} G;)zI-S5D=( :
v (};vF*“-S/ ”D }LSZcP i!#?1h* -S5 rP1,mo =Ma
v 8(*}Vr V{. DV#XQuery a+ DVbM *-
v I9l/}FcqC#}g,TB 9l/}+y]V{.“2005-01-01” 4 9(`M*
v IZC/} fn:true() M fn:false() 5X#b) /}+5X<{ 5 true M false#b
v I`Vmo=(}g ,c u mo=M_- mo=)5X#
GI XML # =(eDdP ;VZ C-S }]`MD 5}#b) }]`M| (
{} 7)kC5Dd{
9 C-S/#
S5#}g,BPD VMa;
b M*-S5:
– “this is a string”(`M* xs:string)
–45(`M* xs:integer )
– 1.44(`M* xs:decimal)
xs:date D5:
xs:date("2005-01-01")
)5;\m>*D V#
Z 1 B pureXML Ev 9
ZccN a9
iI;vr` v
cNa 9 rw
D Z c rP,b )cNa9rwI;vy Z c MISC
yZc1 Srd SCJDyP ZciI#? vZc;tZ; vcNa9,x? vcN
a9;P;vy Zc#DB2 'VTB 6 V Zc:D 5"*X "tT "D> "&m8>
E"M"M#
TB XML D5 products.xml |( ;vy *X products,Cy *XV|, ;) prod-
uct *X#?v product *X<P;v{* pid(z7j6 )DtTT0 ;v{*
description DS*X# description *X|,{* name M price DS*X#
<products>
<product pid="10">
<description>
<name>Fleece jacket</name>
<price>19.99</price>
</description>
</product>
<product pid="11">
<description>
<name>Nylon pants</name>
<price>9.99</price>
</description>
</product>
</products>
Z 11 3 D< 3 T> products.xml D}]#MDr/m>#C<P|(D5Zc(D )"
* XZc(E )"tT Z c(A )MD> Z c(T )#
10 pureXML 8O
<
3. products.xml
D5D }]#M<
g >}Py > ,;vZcI + d{ Z cw*S z ,SxiI;vr ` v
9
D Sz#name M price *X<G description *X D Sz#5* Fleece Jacket D
D>ZcG name *X DSz,x D>Zc 19.99 G price *X DSz#
ZctT
?vZc<_P;)
|(:ZcD {F"Sz "8z "tTT0C 4hvCZcD d{E"# ZcV `7
(*X (Zca)KD)t T#
;vZcI T_PBfD ;vr` vtT:
node-name
8 z G10Z cD 8z D Zc #
ZccN a
#ZC>}P,product *XG products DSz #description *X4G product
XT
,b)X TC4hvCZcD X w#}g ,ZcD XTI\
ZcD {F,m>*
QName#
Z 1 B pureXML Ev 11
type-name
Sz G10Z cDSz DZ crP#
tT tZ10Z cD;i tTZc#
string-value
typed-value
{FUdwCr
content
ZcV`
DB2 'VTB 6 VZc:D 5"*X "tT "D> "&m 8>E"M" M#
D5Z c
D 5Zc |, XML D 5#
ZcD /,(KP1 )`M (2F*
ITSZcPi! DV{ .5#
ITSZcPi! DIcvr` v-S5 iI DrP#
k Zc`X* D w Cr Z{FUd#
ZcD Z]#
`M"M
)#
D 5Z c IT_P`vSz, 2 I T;PSz# S z I TG*XZ c " &m8nZ
c""MZ cMD>Z c#
D 5Z cD V{.5 H Z+| D yPsz D >ZcDZ]4 D 53rx P "C D a
{ #V{.5D`M
* xdt:untypedAtomic#
D5Z c_PBPZ ctT:
v children(I\G UD )
v string-value
v typed-value
I TZ XQuery mo= P 9 C - }F c qCD 9 l / } 49 l D 5 Z c # db2-
fn:xmlcolumn /}9IT5 X;5PD5Z c#
* xs:string# D 5Z cD `M5kV{. 5 `,, + `M5 D `M
*XZc
*XZc|, XML *X#
;v*XI T _P ;v8 z, 2 I T ;P8z;,1 ,|I T _P`vSz, 2 I T
;PSz# SzITG*XZc" &m8nZc" "MZcMD> Zc#D 5 ZcM
t TZcv;a G *XZcD Sz#+ G ,
z#*XZcD tTX k_P(;D QName #
ITO**XZcG |T:DtT D8
12 pureXML 8O
*XZc_PBP ZctT:
v node-name
v parent(I\G UD )
v type-name
v children(I\G UD )
v attributes(I\G UD )
v string-value
v typed-value
v in-scope-namespaces
I TZ XQuery mo=P 9 C1S9 l /}r_-}FcqCD9l/}4 9 l* X Z
c#
* XZcD type-name tT8 > | D`M5kV{. 5. d D X5#}g,g {;v*
XZc_P type-name tT xs:decimal M
g {*XZcD type-name tT G xdt:untyped ,G4 * XD`M5HZdV{.5,"
R`M* xdt:untypedAtomic#
V{.5“47.5” ,G4`M5MG!}5 47.5 #
tTZc
tTZcm > XML tT#
tTZcIT_P ;v8 z, 2 IT;P8z# I +5P tTD*XZ cO* G|D
8 z,!\tTZc; G |D 8 *XDSz#
tTZc_PBP Zc tT:
v node-name
v parent(I\G UD )
v type-name
v string-value
v typed-value
ITZ XQuery mo
c#
t TZcD type-name t T8 > |D`M5kV{. 5. d D X5#}g,g {;vt
TZc_P type-name t T xs:decimal MV{.5“47.5” ,G4|D` M5MG !}5
47.5#
=P 9C1S9l/}r_-}Fc qCD 9l/}49 ltTZ
D>Zc
D>Zc|, XML V{Z]#
D>ZcIT_P ;v8 z, 2 IT;P8z#w *D5Z cr*XZ cDSz D D
> Zcv;aw*`Z,zv V # 1 9lD 5 Z cr*X Z c1,NN`Z D D > Z
c,z<a;O"I %vD>Z c#g{
D >Zc_PBP Z ctT:
v content(I\G UD )
v parent(I\G UD )
I TZ XQuery mo=P 9 C-}FcqCD 9 l /}49lD>Zc,2I T (}1
S*X9 l/}DYw49 lD> Zc#
q CDD>ZcGU D ,G4 a +|Oz#
Z 1 B pureXML Ev 13
&m8nZc
&m8nZcab0 XML &m8n#
&m8nZcIT_P ;v8 z,2I T;P8 z# &m8nDZ]; \|,V{ .
?> #&m8nD?jXkG;v NCName#C?jC4j6*+8 > E""MxD&C
Lr#
&m8nZc_PB PZctT
v target
v content
v parent(I\G UD )
ITZ XQuery mo=P 9C1S9 l/}r_-}FcqCD 9l/}4 9l&m8
nZc#
:
"MZc
"MZc|, XML "M#
"MZcIT_P ;v8 z, 2 IT;P8z # "MZcD Z]; \|( V{.“--”
(=v ,V{ ),"Rns;v V{ ;\G,V{ (-)#
"MZc_PBP Zc tT:
v content
v parent(I\G UD )
ITZ XQuery mo=P
c#
9 C1S9l/ } r_-}FcqCD 9 l/}49l" M Z
ZcDD 53r
;vcNa9PDyP Zc< *qS3 ;3r(4 ,
c<+ZdSz0fvV#g{ZccNa9GCQrP/D XML m> D,G4D 5
3 rkZcDvV 3 r`T&#
c Na9PD Z c4TB3rv V :
v yZcG Z; vZc#
v *XZc Z|GDSz0 fv
v tTZc tzZk|G`X*D *X ZcsfvV# tTZcD `T3 rIT GN
bD,+GZ&mi/Zd K3r;aDd#
v ,zD`T3rI |GZZ cc Na9PD3r47(#
v ;vZcD SzMs z +Z CZcsf D
Zcj6
? vZc<P; v (;j6#4 9 = v ZcD { FM5<`,,2IT +| G xV
*#;x,-S5;Pj6 #
Z cj6k ID-type tT;`,#XML D5P D *XIID5w_x( ID-type tT#
;x,Zcj6G I53T / *?vZc8 (D,C
V#
D53r
,z0fvV#
'^(1S4{ Zcj6#
)#4UC3r,? vZ
14 pureXML 8O
Zcj6CZ &mBP `M Dmo=:
v ZcH O#is Kc{9C Zcj647(=v ZcGq_P`,j 6#
v 76mo=# 76mo=9 CZc j64{}X4DZ c#
v rPmo=#union "intersect r except Kc{ 9CZcj64{}X4D
ZcD`M5MV{. 5
Zc#
? vZc<,1P
`M5 MV{.5
#b=vZctTCZ 3) XQuery Yw(}g ,
-S/)M/ } (}g ,fn:data"fn:string M fn:deep-equal )D(eP#
m1.Z cD V{.5M`M 5
ZcV` V{. 5 `M 5
D 5 xs:string }]`M D 5},|G+ | DyPszD>
ZcD Z]4D53r xP"CD a{#
XML D5P
D*X
XML D5P
DtT
D > w * xs:string }]`MD 5 }DZ]# w * xdt:untypedAtomic }]`MD 5 }DZ]#
"M w* xs:string }]`MD 5}DZ]# w* xs:string }]`MD 5}DZ]#
& m8n w* xs:string }] ` MD5 } DZ]# w*
xs:string }]`MD 5
szDZ]4D 53rx P"C Da{#
xs:string }]`MD 5 },|m>-< XML D5P
DtT5#
} ,|G+ | DyPD>Zc
xdt:untypedAtomic }]`MD 5 },|G+|Dy P
s zD>ZcDZ]4 D 53rx P "C D a{#
xdt:untypedAtomic }]`MD 5 },|G+|Dy P
D >Zcsz D Z]4 D 53rx P "C D a{#
xdt:untypedAtomic }
XML D5P DtT5#
xs:string }]`MD 5}DZ]#
]`MD5 },| m>-<
'V XML D$_
IBM MZ}=$_'V9C pureXML &\?~#BP $ _Gf DB2 }]b~qwa
)Dr_GI %@S IBM BX D:
IBM Data Studio:T XML D'V|(TB8 n:
v f" }L:IT4(MKP| , XML }]`Mw* dk MdvN }D f"}L#
v }] dv:ITw
v SQL `-w: I4(,19 CX5}]M XML }]D SQL odM XQuery m
o=#
v XML #=:IT\m XML #=f" b(XSR )PD#=D 5 ,|("aM>}#
=T0` -# =D5#
v XML D5i$:ITkT
v C'(eD SQL /}: I4("KP9C XML N}DC'(e D SQL / }#
M rD> N =i4|,Z XML PPDD 5 #
Z XSR P"aD#=i $ XML D5#
DB2 X FPD: DB2 X FPD'VT|D m`\m &\9C>z XML }]`M#K
| B9}]b\m1\ ;Z; v GUI $_P&m XML }]MX5
}]#
\'VD\mNq D >}| (:
v 4(xP XML PDm
v 9CBD“4(w} ”r <44( XML Pw}
v i4f" Z XML PPD XML D5D Z]
v 9C&m XML D5yh D XML # ="DTD Mb? 5e
v U/|,K XML PDm D3 FE"
Z 1 B pureXML Ev 15
|nP&mw:tIv DB2 |n'V>zf" XML }]#ITS DB2 |nP&m
w(CLP )9CX5 }]T_D XML }]#ITS CLP 4PDNq D >}| ( :
v (}T XQuery odSO XQUERY X|V0 :4"v XQuery od#
v <kM <v XML }]#
v T XML PU/3
FE"#
v 9C XML }]`MD IN"OUT r INOUT N }4wCf" }L#
v 9C&m XML D5yh D XML # ="DTD Mb? 5e
v XiyZ XML }]Dw}M| , XML PDm#
v Vb XML D5#
DB2 Development Add-In for Microsoft Visual Studio .NET :IT9 C Development Add-In for Microsoft Visual Studio .NET 44(_P XML PDmMyZ XML
}]Dw}#
Z K$_Pq 4 (NNd{P;y4( XML P #;h*+}]`M8(
* XML#IT(}9CK $ _PD“XML w } hFw”44(w } # ;Xg9C CRE-
ATE INDEX o(4(y Z XML }]Dw} 1y*sDGyV/8( XML #=mo
=#`4,ITS Q
"aD XML #= D wMm > "XML PP D D 5 r> X D~P D
XML #=T<N= =!qk*("w }D XML Zc#C$_ +*zzI XML #=
m o=#r_,ITV/8 ( XML # = mo = #8(KyPd {w }tT.s,C$
_+*zzIw}#
EXPLAIN :ITZ XQuery odM SQL/XML odP"v EXPLAIN od,TclY
i 4b)odDCJ = 8,| ( DB2 } ] b ~qwG q 9Cw}# * "v XQuery o
dD EXPLAIN o d,I9C XQuery X|V,szC%}Er+}E}p4D XQuery
o d,gTB>}y > :
EXPLAIN PLAN SELECTION FOR XQUERY 'for $c in
db2-fn:xmlcolumn("XISCANTABLE.XMLCOL" )/a[@x="1"]/b[@y="2"] return $c'
DB2 +6q EXPLAIN mPDCJ =8E"#yP XML PDZ{r Ps!< f"Z
EXPLAIN_STREAM m D SEQUENCE_SIZES P P# zI \ 9a " b =
EXPLAIN_PREDICATE mPfZ3)}],|G G; )z^(6 pD=J#b) =J
I DB2 }]b~qwZ EXPLAIN YwZdTw}(hP9 C D XPath mo=xP
51zI#z;h*@@K= J E" #b)=J; GE/w=8D;? V,rKZ
s
PREDICATE_ID M FILTER_FACTOR PPD 5* -1#
r _,(}9C Visual Explain $ _4i4 b )CJ = 8D<Nhv,IT\ b V/b
M EXPLAIN m#BPZc T >Z<NPT5w XML Yw:
IXAND
> DB2 }]b~qwQ+ AND =J&CZ `vw}(hDa{#
8
XISCAN
8> DB2 }]b~qwQ 9Cy Z XML }]Dw}4CJ }]#
XSCAN
8 > DB2 } ]b~qwQT XPath mo=s5,"RQS XML D5Pi! XML
D5,N#
16 pureXML 8O
XANDOR
8 > DB2 } ]b~qwQ+ AND M OR
=J&CZ `vw}(hDa{#
XTQ
8 > DB2 } ]b~qw 9 CKXbmS P (TQ )++V XML r P PD?n"M
=d-<} ]bVx,y]CnD@@S XML D5lw XML }],;s+ XML
} ][ /= d vrPP#
pureXML D*O'V
Z*O73P,I9C|, XML PPf" D XML D 5D6L }]4# Ii/"&m
6L XML }],|(+ XML D5Vb * 6Lm#
h *H*|, XML P(dPf" K * 9CDD5)D 6Lm4(GF,E\9C6L
XML }]#
P XhC|( XML }]4D
L XML }] ” #
pureXML D4FMB~"< 'V
XML }]`MD WebSphere®Replication Server M WebSphere®Data Event Publisher 'VJmz4 F""<f" Z XML PPD XML D5#
I 9C Q 4FZ } ] b .d4 F XML D5,2 I 9C B ~"<+D54FA&C L
r#
P X*|(f" Z XML PPD XML D 5D }]bhC Q 4 F M B ~"<D|`E
",kND WebSphere Replication Server M WebSphere Data Event Publisher D5P
D“XML
}]`M”08wb#
XZ XML 'VDDB
(} developerWorks ®E"\mIqC XZ{ C XML 'VDd{DB# b)DBf0
c:Dwb,|((FM}] F/"(CEv " p=LLM9C XML }] DnQ v
(#
IZBfDx7P R =b)D B:www.ibm.com/developerworks/db2/zones/xml/#
*O53D|`E",kND*O~qwD5PD“9C6
":developerWorks "G DB2 E"P D D;?V#K4S+ r * DB2 E
DZ]#
Z 1 B pureXML Ev 17
"PDTb
18 pureXML 8O
Z 2 B pureXML LL
I 9C pureXML XML } ]`M 4 (emP, T cz I Z?PPf" %vq =<C D
XML D5#>LL5wgNhC DB2 }]bTf" XML }]T0gN9C pureXML
&\?~4Py> Yw#
Z jI>L L .s,z+ \ ; 4 PBPNq:
v 4(I f" XML }]D DB2 }]
v 4(yZ XML }]Dw}
v + XML D5ek = XML `MDPP
v |Bf" Z XML PPD XML D5
v y] XML D5D Z]>}P
v i/ XML }]
v kT XML #=i$ XML D5
v 9C XSLT y =md ; XML D5
bMm
C++ "Java M PHP .`D &CLr` L oT' V XML }]`M
4+ XML }]f" Z DB2 }]bmP,S mPlw }]rwC _P XML N }Df
"}LrC '(eD/}#
> LLG*%;Vx}]b73`4D,+z2IZVx}]b73P9C pureXML &
\?~#
#IT`4&C L r
Hvu~
Z DB2 |n0ZP,(}"v db2 -td~ | n(xP -td~ !nD db2 |n)4t/
DB2 |nP&mw#
-td !na+& / t{E(~ )hC*od U9 V{#8(1!VE(-t !n)TbDU
9V{I7#;amsbM9 C{F UdywDodri/,-rG {F Udyw2
G CVEU9D#>LLP D > } 9 C ~ U9V{#
I + N LPD>
r_,I9C|n`-w4T; %== "v|nMod#
{ FUd:LLP9CD XML D 5 |,{ F Ud#9C|,{ F UdD XML D 5
1,8({FUdDyPi/MX*Yw(g
Z XML }]Dw}r 9 C XQuery mo=4i/ XML }])Xkyw,;{ FU
d E\zIZ{Da{#9C|,{FUdD XML D 5 1,yw{ F U dGj<{F
UdP*#
1
} T;%==d k r 4F"3y= DB2 |nP& m wP#
(}9C CREATE INDEX od44(y
1. Z Windows Yw53O, H9C db2cmd |nt/ DB2 |n0Z,;s"v db2 -td~ |n#
© Copyright IBM Corp. 2006, 2009
19
N L 1:4( I Tf" XML }]D DB2 }] b Mm
>NLhvgN 9C|, XML PD m4(}]b#
Z >LLP,z+ XML }]f" Z;vmP,xK m |,_P XML `MDP D m#
k q-BP=h44(>L L P 9CD } ]bMm:
1. (}"vTB|n44( F* XMLTUT D}]b:
CREATE DATABASE xmltut~
1!ivB,+Z4 ( }]b 1tCT/f" w#T/f" wITa_T\"R |
]W\m XML }], r*|+zII Ty]h *xP)9D}]b \ mUd
(DMS )mUd#
x R,Z1! i vB,}]b 9 C UTF-8 (Unicode )zk/#g{!q+
]f" Z9C UTF-8 TbDzk/ D } ]bP,G4nCT;xPzk3*;DN
= (}g BIT DATA"BLOB r XML )ekK } ]#*h9Z 4 P XML bvZ
d 9CV{ } ]`M,Sx@9I\ "zDV { f; ,k+ ENABLE_XMLCHAR
dCN}h C* NO#
2. k}]
3. 4(;v{* Customer "R|,F* INFO D XML PDm:
5XALL
b,S:
CONNECT TO xmltut~
CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY, Info XML)~
f" XML }]r_T XML }]("w} 1 ;h* 9 Cw|#
9IT9C ALTER TABLE SQL od+ ;v r`v XML PmSAm#
NL 2:4(yZ XML }]Dw}
> NLhvgN4( XML } ]w}#yZ XML } ]Dw} I Ta_i/ XML P
DT\#kT zZ=JPT0g D 5xP, S151 9C D XML *XrtT(" w
}#
XML }
20 pureXML 8O
X 5w}M XML }] w }<T P(" w }#+G,X5w}GT{vP("w}
XML }]w}; GTPD3?V( "w}#(}8 ( XML #=48w*T XML P
D D)?V("w},C#=G\ ^FD XPath mo=#9 X k8(Q("w}D5+
ICDV}]`Mx Pf" #(#, z!qD`M &C k i/P9CD`M`
kX5w};y,(izT=JM;f D5,SP519CD XML *Xr tT ( "w
}#
;\T%v XML P("w};; 'ViOw}#+G, ;v XML PI TP`v w
}#
";G CREATE INDEX odDy P Sd< J CZyZ XML }]Dw}# P X j8
,kND CREATE INDEX od#
E"
* 4( XML }]w } ,k"v T Bod:
,x
,#
CREATE INDEX cust_cid_xmlidx ON Customer(Info)
GENERATE KEY USING XMLPATTERN
'declare default element namespace "http://posample.org"; /customerinfo/@Cid'
AS SQL DOUBLE~
Kod+T CUSTOMER mD INFO PP <customerinfo> *XD Cid tT5 ("w
} #1!ivB,T XML }]("w}.s ,g{4\+K XML }]*; * 8(D
}]`M SQL DOUBLE,G4;a4(w}u ? ,2;a5 Xms#
z 8(D XML # =xVs!4 #}g,g { XML D5
tT,G4b )D5kKw}+;%d#
5XALL
NL 3:+ XML D5ek = XML `MPP
I9C INSERT SQL od+q =<CD XML D 5ek = XML `M D PP#> NL
hvgN 9C INSERT SQL od+q =<CD XML D 5ek = XML PP#
> NLhvgN9C|nP&mw+ XML D5V/ek = XML ` MPP#+G,(
#a9C&C Lr4ek XML D5#
\ IT( } 9C XML `M"~xF`MrV{`M 4 ek XML }],+ G *K\
!
b "zzk3*;Jb,k9C XML `M r ~xF`M#Z>NL P ,XML D5G
V{D V#Zs`}ivB,;\1ST_P XML } ]`MD?j8 (V{.}
z XkWH 9 C XMLPARSE / } 4T = bv } ]#+ G ,Z INSERT"UPDATE r
DELETE Y wP , IT 1 ST XML P8 (V {. } ], x ; h *T = wC
XMLPARSE /}#Zb}VivB,+~ =bvV{. }]#PX|`E",kND
XML bvD 5#
* +}v XML D5
INSERT INTO Customer (Cid, Info) VALUES (1000,
'<customerinfo xmlns="http://posample.org" Cid="1000">
<name>Kathy Smith</name>
<addr country="Canada">
<street>5 Rosewood</street>
<city>Toronto</city>
<prov-state>Ontario</prov-state>
<pcode-zip>M6W 1E6</pcode-zip>
</addr>
<phone type="work">416-555-1358</phone>
</customerinfo>')~
e k=zZNL 1 P4( D Customer m,k"vBPod :
P|, cid tTx; G Cid
];
INSERT INTO Customer (Cid, Info) VALUES (1002,
'<customerinfo xmlns="http://posample.org" Cid="1002">
<name>Jim Noodle</name>
<addr country="Canada">
<street>25 EastCreek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>')~
INSERT INTO Customer (Cid, Info) VALUES (1003,
'<customerinfo xmlns="http://posample.org" Cid="1003">
<name>Robert Shoemaker</name>
Z 2 B pureXML LL 21
<addr country="Canada">
<street>1596 Baseline</street>
<city>Aurora</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N8X 7F8</pcode-zip>
</addr>
<phone type="work">905-555-2937</phone>
</customerinfo>')~
*7O Gq QI&ekG<,k" v TBod:
SELECT * from Customer~
5XALL
NL 4:|Bf"Z XML PPD XML D5
> NLhvgN(}+ UPDATE SQL od k XQuery |B m o=dO 9 Cr_%@
9C UPDATE SQL od4|B XML D5#
;9C XQuery |Bmo =xP| B
g{z9C UPDATE odx; 9C XQuery |Bmo =, G4Xk4 P +D5|B#
* |BzZNL 3 PekDd P ;vD5D <street> "<city> M <pcode-zip> *XD5,
k"vTBod:
UPDATE customer SET info =
'<customerinfo xmlns="http://posample.org" Cid="1002">
<name>Jim Noodle</name>
<addr country="Canada">
<street>1150 Maple Drive</street>
<city>Newtown</city>
<prov-state>Ontario</prov-state>
<pcode-zip>Z9Z 2P2</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>'
WHERE XMLEXISTS (
'declare default element namespace "http://posample.org";
$doc/customerinfo[@Cid = 1002]'
passing INFO as "doc")~
22 pureXML 8O
XMLEXISTS =J7#vf;|,tT Cid= ″ 1002 ″ DD 5 #k"b, XMLEXISTS P
D=Jm o= [@Cid = 1002] 48( *V{.HO [@Cid = ″ 1002″ ] D-r# -r Z
Z zZ70 2 P* Cid tT4(w} 19 C K DOUBLE }]`M#* K 9Cw} k
Ki/%d,Z= Jm o=P;\+
Cid 8(*V{.#
*7O Gq Q|B XML D5,k"v TBod:
SELECT * from Customer~
|, Cid=″ 1002″ DG<P |,Q|DD <street>"<city> M <pcode-zip> 5#
g {IT( } 9C;vmDG XML P54 j 6 KmPD XML D 5 ,G4IT 9 C
SQL HO=J4 j6*|BD P#Z0 ;v > } P, XML D5P D Cid 59 f"Z
CUSTOMER mD CID PP,zI \Q9C CID
P PD SQL HO=J4 j 6P#Z
0 ;>}P,I T + WHERE Sdf;* T BSd:
WHERE Cid=1002
9C XQuery |Bmo =xP| B
g{z+ UPDATE od k XQuery |Bmo=dO 9 C, G4IT|BVP XML D
5D3)?V#
* |BVP XML D5P D M' X 7,k"v T B SQL od,|9 C K XQuery d;
mo=:
UPDATE Customer set Info =
XMLQUERY(' declare default element namespace "http://posample.org";
transform
copy $mycust := $cust
modify
do replace $mycust/customerinfo/addr with
<addr country="Canada">
<street>25 EastCreek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
return $mycust'
passing INFO as "cust")
WHERE CID = 1002~
*|BM'X7,XMLQUERY /}+4Pd 9Cf;mo=D XQuery d;mo=,
;s+Q|BD E "5XA UPDATE od, g By>:
v XMLQUERY +]Sd9Cj 6 cust T+ XML P INFO P D M'E" + ]A
XQuery mo=#
v Zd;mo=D copy SdP,+q!M'E"
?#
v Zd;mo=D modify SdP,f; mo=af ;M 'E"1 >PDX 7E"#
v XMLQUERY aZ $mycust d?P5 XQ|BDM 'D5#
D_-lU"+d8(x $mycust d
* 7O XML D5Gq|, Q |BDM' X 7,k"v T Bod:
SELECT Info FROM Customer WHERE Cid = 1002~
5XALL
NL 5:> } XML }]
>NLhvgN 9C SQL od4> }{v XML D5r _v> } XML D5D 3)?
V#
>}{v XML D5
*>}{v XML D5,I9C DELETE SQL od#9 C XMLEXISTS =J4j6
*>}DX(D 5#
*S INFO PPv>}d <customerinfo> *X_P Cid=1003 tTDG ) XML D5,
k "vTBod:
DELETE FROM Customer
WHERE XMLEXISTS (
'declare default element namespace "http://posample.org";
$doc/customerinfo[@Cid = 1003]'
passing INFO as "doc")~
Z 2 B pureXML LL 23
g {IT( } 9C;vmDG XML P54 j 6 KmPD XML D 5 ,G4IT 9 C
SQL HO=J4 j6*>}DP#Z0 ;v > } P, XML D5P D Cid 59 f"Z
CUSTOMER mD CID PP,zI \Q9CTB DELETE od4PK `,DYw,b
a + SQL H O =J&CZ
DELETE FROM Customer WHERE Cid=1003~
CID PTj6P:
*7O Gq Q>} XML D5,k" v TB SQL od:
SELECT * FROM Customer~
+5X=uG<#
>} XML D5D3)?V
* v>} XML D5D 3)?Vx ;G > }{vD5,k9C|,“ > } XQuery |B
”mo=D UPDATE SQL od#
* S Cid D5* 1002 D M'G<P>}yPg0E",k"vTB9C XMLQUERY
/ }D SQL od:
UPDATE Customer
SET info = XMLQUERY(
'declare default element namespace "http://posample.org";
transform
copy $newinfo := $info
modify do delete ($newinfo/customerinfo/phone)
return $newinfo' passing info as "info")
WHERE cid = 1002~
* }% <phone> *X, XMLQUERY /}+4Pd 9 C> } mo=D XQuery d ;m
o=,;s+Q|BD E"5XA UPDATE od ,gBy >:
v XMLQUERY +]Sd9Cj6 info + XML P INFO PDM'E"+]A XQuery
mo=#
v Zd;mo=D copy SdP,+q!M 'E" D_
d?#
v Zd;m o=D modify SdP,>} m o=a>}M 'E"1 > PD <phone> *
X#
v XMLQUERY aZ $newinfo d?P5 X Q|BDM 'D5#
*7O M'G<PGq Q;Y|, <phone> *X,k"v TBod:
SELECT * FROM Customer WHERE Cid=1002~
5XALL
NL 6:i/ XML }]
> NLhvgN 9 C SQL M/r XQuery ( 9 C XQuery m o=)4i/ XML } ]#
g{zv9C SQL ,G4; \ZP6pxPi/#2MG5,IT5Xf" ZPPD{
v XML D5,+ ;\Z D 5ZxPi/r_5 X D5,N#*Z XML D 5 Zi/5
5XD5,N,Xk9C XQuery#
r_
-lU"+d8(x $newinfo
24 pureXML 8O
>NLPDi/Z SQL OBD P9C XQuery,Z XQuery OBD P9C SQL#
X*Bn:XQuery xVs!4 ,+ SQL ;xVs!4 #r K,Z9C XQuery 1,
8 (n gm{M SQL #= { ( 1 !ivB,b=v{F< G s4) .`D{F1;(
*!D #49Z SQL OBDP, XQuery mo =T+xVs!4 #
Z SQL OBDPi/
lw{v XML D5
*lwf" Z{* INFO DPP D yP XML D5 T0 CID w |PPD 5,
k "vTB SELECT od:
SELECT cid, info FROM customer~
Ki/5X=v f"D XML D 5#
lwM}K XML 5
* Z INFO PD XML D 5 Pi/,k"v T B SELECT od,|+9 C
XMLQUERY /}4wC XQuery mo=:
SELECT XMLQUERY (
'declare default element namespace "http://posample.org";
for $d in $doc/customerinfo
return <out>{$d/name}</out>'
passing INFO as "doc")
FROM Customer as c
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
$i/customerinfo/addr[city="Toronto"]' passing c.INFO as "i")~
Z XMLQUERY /}P,WH8(1 !{FUd#K{ F UdkH0ekDD
5D{FUd%d#for Sd8((} INFO P P ?vD 5D <customerinfo>
* XxP|z#INFO PG9 C passing Sd8(D,CSd+ INFO Ps(
A for Sd Py}CD doc d?#;s,return Sd9l ;v
C *X|, for Sd?N| z zID <name> * X#
WHERE Sd9C XMLEXISTS =J4v<G INFO PPD;?VD 5#K
} KvzI <city> *X(X8(D 7 6)D5* Toronto D G)D 5 #
K SELECT od+5XTB Q 9l* X:
<out xmlns="http://posample.org"><name>Kathy Smith</name></out>
9C db2-fn:sqlquery 1=xN }
*+5+] A db2-fn:sqlquery /} PD SQL +i/,kKP TBi/:
VALUES XMLQUERY (
'declare default element namespace "http://posample.org";
for $d in db2-fn:sqlquery(
''SELECT INFO FROM CUSTOMER WHERE Cid = parameter(1)'',
$testval)/customerinfo
return <out>{$d/name}</out>'
passing 1000 as "testval" )~
XMLQUERY /}(} 9 Cj 6 testval +5 1000 +]A XQuery mo=#
;s XQuery mo=(} 9C PARAMETER j? /}+C5+] A db2-
fn:sqlquery /}#
<out> *X,
XQuery mo=+5XTB Q9l* X:
<out xmlns="http://posample.org">
<name>Kathy Smith</name>
</out>
Z 2 B pureXML LL 25
Z XQuery OBDPi/
DB2 XQuery XX a)K TB =vZC/ } ,Tk DB2 }]bdO 9C : db2fn:sqlquery M db2-fn:xmlcolumn# db2-fn:sqlquery lww* SQL +i/Da{m Dr
P #db2-fn:xmlcolumn S XML P Plwr P #
g {i/1SwC XQuery mo=,G4 X kZ|0fmS ;xVs!4 D X |V
XQUERY#
":IThC8v!
n4(F|nP& mw73,XpGCZ T> XQuery mo=Da
{ #}g,4 g By>hC -i ! n ,Tc| ] WDA XQuery mo=Da { :
UPDATE COMMAND OPTIONS USING i ON~
lw{v XML D5
* lwH0ek= INFO PP D y P XML D5,I T + XQuery k db2-
fn:xmlcolumn r db2-fn:sqlquery dO9C#
9C db2-fn:xmlcolumn
*lw INFO PPD yP XML D5,kKP TBi/:
XQUERY db2-fn:xmlcolumn ('CUSTOMER.INFO')~
1 !ivB,SQL odPD{F+T/ * ;*s4#r K ,1 9 C
CREATE TABLE SQL od4(K CUSTOMER m1, m{MP {<
* s4#r * XQuery xVs!4 ,yTZ9C db2-fn:xmlcolumn 8
(m{MP { 1 X k9C}7Ds !4 #
Ki/H[Z SQL i/ SELECT Info FROM Customer#
9C db2-fn:sqlquery
*lw INFO PPD
XQUERY db2-fn:sqlquery ('SELECT Info FROM Customer')~
yP XML D5,kKPTBi/ :
z;X ICs4V 848( INFO {FM CUSTOMER {F,bGr
* SELECT odGZ SQL OB DP&mD,r K;xV s!4 #
26 pureXML 8O
l w?V XML D5
} Klw{v XML D5.b,9IT (}+ XQuery k db2-fn:xmlcolumn r
db2-fn:sqlquery dO9C4lwD5,N"}K D5PfZ D5#
9C db2-fn:xmlcolumn
*5X|, INFO PPyPD5D <name> ZcD *X,b)D5z
c “<city> *X(X8(D76 )D5* Toronto ,kKPTBi/ :
XQUERY declare default element namespace "http://posample.org";
for $d in db2-fn:xmlcolumn('CUSTOMER.INFO')/customerinfo
where $d/addr/city="Toronto"
return <out>{$d/name}</out>~
db2-fn:xmlcolumn /}S CUSTOMER mD INFO PPlwr P# for
S d+ $d d?s(A CUSTOMER.INFO P PD?v <customerinfo>
* X#where Sd+D5^F * <city> * X(X8(D76 )D5*
Toronto DG)D 5# return Sd+9ly5XD XML 5#K 5G;
v <out> *X,| |,zc Z where SdPy8(u
<name> *X,gB y>:
~DyPD5D
<out xmlns="http://posample.org">
<name>
</name>
</out>
9C db2-fn:sqlquery
*Z XQuery mo=P"v+i/,k KP TBi/:
XQUERY declare default element namespace "http://posample.org";
for $d in db2-fn:sqlquery(
'SELECT INFO
FROM CUSTOMER
WHERE Cid < 2000')/customerinfo
where $d/addr/city="Toronto"
return <out>{$d/name}</out>~
Z K>}P,WHZ+i/PCG XML CID PPDX( 5 ^F*;i
/D XML D 5/#K>}5wK db2-fn:sqlquery DE c:|Jm Z
XQuery mo=P &C SQL =J#;s,Z XQuery mo=D where
S dP,+ SQL i/zIDD 5 x ;=^ F * <city> *X(X 8 (
D76) D5
K i/ z zDa{k9 C db2-fn:xmlcolumn D0;v>}zzDa{`
,#
<out xmlns="http://posample.org">
<name>
</name>
</out>
Kathy Smith
* Toronto DG) D5#
Kathy Smith
9C db2-fn:sqlquery 1=xN }
* +5+] A db2-fn:sqlquery /} P D SQL +i/,kKP T Bi
/:
XQUERY declare default element namespace "http://posample.org";
let $testval := 1000
for $d in db2-fn:sqlquery(
'SELECT INFO FROM CUSTOMER WHERE Cid = parameter(1)',
$testval)/customerinfo
return <out>{$d/name}</out>~
Z XQuery mo=P,let Sd+ $testval D 5h C* 1000 #;s,
Z for SdP,mo=a 9C PARAMETER j?/}+C 5+] A
db2-fn:sqlquery /}#
XQuery mo=+5XTB Q9l* X:
<out xmlns="http://posample.org">
<name>Kathy Smith</name>
</out>
5XALL
NL 7:kT XML #=i$ XML D5
>NLhvgNi$ XML D5# ;\kT XML # =i$ XML D5;; ' VkT
DTD xPi$#d;z;\kT DTD xPi$,+GT; ITek|, DOCTYPE
r _}C DTD DD 5 #
Z 2 B pureXML LL 27
IT9C ;)$_(}g ,IBM Rational ®Application Developer PD$_)4o zz
y ] w V4(d P |( DTD"mM XML D5)zI XML #=#
Zi$. 0,XkrZC XML #=f" b(XSR )"a XML #=#K}Lf0="
a iI XML #=D?v XML #=D5,;sj I " a #;V" a XML #=D=
(G9 C|n
#
* "a#=D5MjI posample.customer XML # =D "a,kKP T B|n#(r*
K XML #=vI;v #=D5iI,yTI 9C%v|n4"aD 5MjI"a#)
K|n+8( sqllib/samples/xml ?<DxT76#g{53OD76;GT c:/sqllib/ *
7,G4kZ |n
REGISTER XMLSCHEMA 'http://posample.org'
FROM 'file:///c:/sqllib/samples/xml/customer.xsd' AS posample.customer COMPLETE~
P`&X^DD~76#
(}i/ SYSCAT.XSROBJECTS ?<S < (||,PXf" Z XSR PDTs D E
"),MITi$GqI&"aKC XML #=#* K|Se~w K,TKi/0da
{ xPK`E,gBy> :
SELECT OBJECTSCHEMA, OBJECTNAME FROM SYSCAT.XSROBJECTS~
OBJECTSCHEMA OBJECTNAME
-------------------- -------------------POSAMPLE CUSTOMER
VZ,IT9C XML # =4xPi$#(# ,Z4P INSERT r UPDATE YwZ
d 9C XMLVALIDATE / } 44Pi $ #v1i $ I& .s ,Ea 4 PTd 8 (K
XMLVALIDATE D INSERT r UPDATE Yw#
* + XML D5ek CUSTOMER m D INFO P( * sKD5TZ posample.customer
XML #=P'),k"vTB od:
INSERT INTO Customer(Cid, Info) VALUES (1003, XMLVALIDATE (XMLPARSE (DOCUMENT
'<customerinfo xmlns="http://posample.org" Cid="1003">
<name>Robert Shoemaker</name>
<addr country="Canada">
<street>1596 Baseline</street>
<city>Aurora</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N8X 7F8</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
<phone type="home">416-555-2937</phone>
<phone type="cell">905-555-8743</phone>
<phone type="cottage">613-555-3278</phone>
</customerinfo>' PRESERVE WHITESPACE )
ACCORDING TO XMLSCHEMA ID posample.customer ))~
K>}PD XML D 5w* V{ }] +]# +G,XMLVALIDATE vT XML }]x
P Yw#r* XML D 5 w *V{}]4+],yTzXk9C XMLPARSE / } 4T
=bv }]#XMLPARSE / }+dTd? bv* XML D5"5X XML 5#
28 pureXML 8O
DB2 } ] b ~ q w T 3 ) Y w 4 P ~ = b v
# } g , 1 z Z
INSERT "UPDATE "DELETE r MERGE odP+} ] `M* STRING (V{"<N
r~xF)D wd?"N} jG r SQL mo=8(x XML P 1,M a4P~=b
v##
*i$GqI&j IKekM i$Yw,k i / INFO P:
SELECT Info FROM Customer~
K i/&5X}v XML D5,dP; v Gz U e kDD 5 #
5XALL
NL 8:9C XSLT y=mxP d;
> N L h v g N 9 C I ) 9 y = m o T d ; ( XSLT) y = m M Z C / }
XSLTRANSFORM +}]bPD XML }]*;*d{q =#
T; v|,Nb}?Ds'zG< D XML D5 * }#?v student *X|,'zDj
6"{V "U O"jdT0MADs' #TBD
<?xml version="1.0"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<student studentID="1" givenName="Steffen" familyName="Siegmund"
age="21" university="Rostock"/>
<student studentID="2" givenName="Helena" familyName="Schmidt"
age="23" university="Rostock"/>
</students>
Kb,Y(z# {i! XML G<PDE""4(IZ/@wPi4D HTML Web 3
f#*d;E",h *BP XSLT y=m:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="headline"/>
<xsl:param name="showUniversity"/>
<xsl:template match="students">
<html>
<head/>
<body>
<h1><xsl:value-of select="$headline"/></h1>
<table border="1">
<th>
<tr>
<td width="80">StudentID</td>
<td width="200">Given Name</td>
<td width="200">Family Name</td>
<td width="50">Age</td>
<xsl:choose>
<xsl:when test="$showUniversity =''true''">
<td width="200">University</td>
</xsl:when>
</xsl:choose>
</tr>
</th>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="student">
<tr>
<td><xsl:value-of select="@studentID"/></td>
<td><xsl:value-of select="@givenName"/></td>
<td><xsl:value-of select="@familyName"/></td>
<td><xsl:value-of select="@age"/></td>
<xsl:choose>
<xsl:when test="$showUniversity = ''true'' ">
<td><xsl:value-of select="@university"/></td>
</xsl:when>
5|,=v'z:
Z 2 B pureXML LL 29
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
</tr>
*d;}]:
1. (}KPBP| n44( =vCZf" XML D5My=m D5D m:
CREATE TABLE XML_DATA (DOCID INTEGER, XML_DOC XML )~
CREATE TABLE XML_TRANS (XSLID INTEGER, XSLT_DOC CLOB(1M))~
2. 9CBP INSERT od+ XML D5M{v XSLT y=mek m P#
*Kr`w Kp{,ZK=hP,Z~v INSERT odPT>KQXOD XSLT y
= m#Z 9 CK o d.0,k +Q X ODy = mf;*H0P>D XSLT y = m#
INSERT INTO XML_DATA VALUES
(1,
'<?xml version="1.0"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<student studentID="1" givenName="Steffen" familyName="Siegmund"
age="21" university="Rostock"/>
<student studentID="2" givenName="Helena" familyName="Schmidt"
age="23" university="Rostock"/>
</students>'
)~
INSERT INTO XML_TRANS VALUES
(1,
'<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
...
</xsl:stylesheet>'
)~
3. (}wC XSLTRANSFORM /}4d; XML D5:
SELECT XSLTRANSFORM (XML_DOC USING XSLT_DOC AS CLOB(1M))
FROM XML_DATA, XML_TRANS WHERE DOCID = 1 and XSLID=1~
30 pureXML 8O
Kd;Ddv*TB HTML D~:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1></h1>
<table border="1">
<th>
<tr>
<td width="80">StudentID</td>
<td width="200">Given Name</td>
<td width="200">Family Name</td>
<td width="50">Age</td>
</tr>
</th>
<tr>
<td>1</td>
<td>Steffen</td><td>Siegmund</td>
<td>21</td>
</tr>
<tr>
<td>2</td><td>Helena</td><td>Schmidt</td>
<td>23</td>
</tr>
</table>
</body>
</html>
zI \#{Dd XSLT y= mZK P1D P*,TmS 4|,Z XML G<PD E "
r_|D dv>mDTJ(}g,|D *4( XHTML dvx;Gj< HTML dv)#
* DdP*,I T 9CN } D~+N } +]A XSLT xL#N } D~>m G XML D
5,"R|
,T&Z XSLT y=mD~P`FodD param o d#
< GZy=mP(eD"+ G Z 0;d;P49CD T B=vN}:
<xsl:param name="showUniversity"/>
<xsl:param name="headline"/>
* K9 C b )N } 4d; XML D 5,IT+N} D ~f" Zm P " +K D ~k
XSLTRANSFORM /}d O9C#
1. 4( PARAM_TAB m4f" N}D~:
CREATE TABLE PARAM_TAB (DOCID INTEGER, PARAM VARCHAR(1000))~
2. 4gBy>4(N }D~:
INSERT INTO PARAM_TAB VALUES
(1,
'<?xml version="1.0"?>
<params xmlns="http://www.ibm.com/XSLTransformParameters">
<param name="showUniversity" value="true"/>
<param name="headline">The student list</param>
</params>'
)~
3. (}wC XSLTRANSFORM /}4d; XML D5:
SELECT XSLTRANSFORM (XML_DOC USING XSLT_DOC WITH PARAM AS CLOB(1M) )
FROM XML_DATA X , PARAM_TAB P, XML_TRANS
WHERE X.DOCID=P.DOCID and XSLID=1~
K}LDd v*TB HTML D~:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>The student list</h1>
<table border="1">
<th>
<tr>
<td width="80">StudentID</td>
<td width="200">Given Name</td>
<td width="200">Family Name</td>
<td width="50">Age</td>
<td width="200">University</td>
</tr>
</th>
<tr>
<td>1</td>
<td>Steffen</td><td>Siegmund</td>
<td>21</td>
<td>Rostock</td>
</tr>
<tr>
<td>2</td>
<td>Helena</td><td>Schmidt</td>
<td>23</td>
Z 2 B pureXML LL 31
<td>Rostock</td>
</tr>
</table>
</body>
</html>
5XALL
32 pureXML 8O
Z 3 B XML f"w
e k=`M* XML D PP D XML D 5 I$tZ 1 !f" Tsr1Sf"Zy>m P
P#y>m Pf" IzX F,"RvICZ!M D5 ;OsDD 5\G f"Z1! f
"TsP#
G q+D5f" Zy>m PP!vZf" M T \*s T 0 S \ D= = #
XML f" Ts
b
f"Udr_,}K3s!DD 5\G f"Z1! f"TsP# f"Z1 !f
"TsPJmzekMlwn s 2GBD XML D 5#
y>m Pf"
T Zyhf"UdY Z 32 KB D XML D5,IT!q1S+ XML D
"Zy>m PP#r* h*D I/O YwuY,y T K!naa_i /"ek "
|Br>} XML D5D T\#
g {TKmtC}]P9u,G4f" Z1! XML f" TsMy>m PPD XML D
5+x P9u#-}9u.s,ITa_T XML D54P I/O Y
Y h*Df" Ud#
XML f"Ts
G f" XML D5D1 !=( #;\z!qgNf" ,h* 32 KB T OD
5f
w D'J,9ITu
1 !ivB DB2 }]b~qw+`M* XML DmPP|,D XML D 5 f"Z XML
f"TsP,LOB }]T `F== f"Z;,ZmDd{Z] D;C#
XML f"Tsk|GD8m TsGV*D,+ f"Ts@5Z8m Ts# TZ f"Z
XML mPDPP D?v XML
D G<,C G <8(SX* D XML f" TsP D N&lw f" Z E LO D XML }
] #f" Z53\mUdP1,k XML f" T s X*DD~ _ PD~`M )9{
.xda#P1+ XML f" TsF* XML }]x( XDA)
n `IT+s!* 2 * V ZD XML D 5 f"Z}]bP#r* XML } ]I\G#
s,yTI\ *kd{}]D:e n/V*%@`S XML }] D:e n/#a)K;
)`S*X4ozz ` S XML f"TsD:eX n / #
P X9 C XML f"TsD XML P
F}”(4Z “CREATE TABLE od ”P8 ( INLINE LENGTH)#
XML y>mPf"w
I !q+!M MPM XML D5f" Z y>m PP,x;G+|Gf"Z1! XML f
"TsP#XML D5D Pf"`FZa9/`M5}T1SekD==f"ZmPPD
iv#
5,DB2 <a,$;uF* XML }]5w{ (XDS )
#
y hDUd D d { E",kND XML PD “ VZ
ZtCy>m Pf" .0, h*v( *+`YPUdCZ ?v XML PDPf" # Ia
Ud!vZ ICDnsPs!,x nsPs! V!v Z4(mD m UdD3s!
)D
© Copyright IBM Corp. 2006, 2009 33
T 08(*mD;?VDd{P#*FcICDPUd,kND XML PD“Ps!”M “
V ZF}”T 0 “CREATE TABLE od ” P8 (D “INLINE LENGTH” #
tCy>mPf"
I Z4(|, XML PDmrD d | , XML PDVPm1,8(XML D 5 & f" Z
y>m PPx;Gf" Z1 ! XML f" Ts P*tC y>mP f",T Z&9CPf
"D?v XML P,h*+ INLINE LENGTH X|Vk CREATE TABLE r ALTER
TABLE od|(Z;p,sz *f" Zy>m PPD XML D5D
F)#
"b,DdVPmD XML P;a+Q-f" ZC P P D XML D 5 T/F=y>m P
P#*F / XML D5,Xk9C UPDATE od|By P XML D5 #
nss !(T VZ
^F
y>m Pf" vI)Z?m> ;, } 32 KB (g { Ps !O !,G4 a|!)D XML
D 59C,, 1 h*u%8(K INLINE LENGTH !n D XML P D XhVZF}*
z#32 KB s!Y(mU d3 s!* 32 KB #f" ,}8(1Sek $HD XML D
51,,}s! DD 5+
;)T XML P8 (K1Sek$ H,M;\a_CZ XML D5D Pf" D 1Sek
$Hs!,+;\5 MC s!#
T/f" Z1! XML f" TsP#
>}
TB>}T SAMPLE }]bPD PRODUCT m D XML P DESCRIPTION tC XML
D 5D y>m Pf" #K>}+*f"Zy >mPPD XML D 5Dns1Sek$H
hC* 32000 VZ,ba **zt BnbyhUd#9C5“32000 VZ”1Y(mU d
3s!* 32 KB #Dd XML Ps,UPDATE oda+
ALTER TABLE PRODUCT
ALTER COLUMN DESCRIPTION
SET INLINE LENGTH 32000
UPDATE PRODUCT SET DESCRIPTION = DESCRIPTION
TB>}4(D MYCUSTOMER mk SAMPLE }]bD CUSTOMER m`F, +d
y>m Pf" GT XML P Info 8 (D#ek= INFO PP1,Z ?m> ;,} 2000
V ZDD 5 + f" Zy>m PP#
CREATE TABLE MYCUSTOMER (Cid BIGINT NOT NULL,
Info XML INLINE LENGTH 2000 ,
History XML,
CONSTRAINT PK_CUSTOMER PRIMARY KEY (Cid)) in IBMDB2SAMPLEXML
XML D5Df"*s
XML D5Z DB2 }]bPy<CDUds!I-<q=DD 5D nus!M;)d{
rX7(#
XML D5F= y >mPP#
34 pureXML 8O
TBPm|,b) rXPn X *D?V:
D5a9
| ,4SjGD XML D 5 h* D f" wU d H _Pr% j GDD 5 yh D U
d*s#}g,g{ ;v XML D5_Pm`6W*X,? v6W*X|,Y
? D>r_PrLDtT5,G4C D 5<C D f" wUd Hw*I D >Z]
iID XML D 5*`#
Z c{ *X{F"tT { F" { FUd0:T 0 ` F DGZ]
}]D$H20lf"
w Ds!#9u-<q = ,} 4 VZDNNbV`MD E "%*Tx P f" ,
+9Cf" w'JH 9C O$D Zc{*_#
tT }k*X }.H
(#,?v*X9CD tT =` ,XML D5yh Df" wUds!M= !#
D5zk3
g { XML D5y9C D `k9 C ?vV{*9C` v VZ,G 4 C XML D
5<C Df" wUds!H9C %VZ V{/ DD 5*s#
9 u g{T|, XML PDmtC}]P9u,G4 XML D 5 h* D f" Ud|
Y#
g{mP|,9C
DB2 f> 9.5 r|Mf> D XML G<q=D XML P,
G 4;'V9uCmD XML f" Ts P D}]#g{Tby D mtC}]P
9u,G4+; 9umTsPD mP}]#* 9 mD XML f" TsP D}]
I )9u,k9C ADMIN_MOVE_TABLE f" } L4(FKm,;s
tC}
]P9u#
Z 3 B XML f" w 35
36 pureXML 8O
Z 4 B ek XML }]
XkH4(|, XML PD m,rrV P mmS XML P,E\ ek XML D5#
4(_P XML PDm
*4(_P XML PDm,Z CREATE TABLE o dP8 ( XML } ]`MDP# ;
v mITP ; v r` v XML P#
(e XML P1; *8 ($ H#+G,k DB2 }]b;;DQrP/ XML }]Ds
!^F*?v XML ` MD5P 2GB,rK ,XML D5D P'^F * 2GB#
k LOB P;
y,XML Pv|, PDhv{# }] %@f" #
":
v g{TmtC}]P9u,G4 XML D5 h*Df" Ud|Y#
v I!q+!M MPM XML D5f" Zy>m PP,x;G+|Gf" Z1! XML
f"TsP#
>}:y>}]b|,;v M' }] m,
CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY,
Info XML,
History XML)
||,=v XML P#(egB y>:
> }:VALIDATED =JliGqi$K 8 (D XML P P D 5 #IT 9 C VALI-
DATED =J(e T XML PDmli<x,T7 #Z mPekr|B DyPD 5<P
'#
CREATE TABLE TableValid (id BIGINT,
xmlcol XML,
CONSTRAINT valid_check CHECK (xmlcol IS VALIDATED))
> }:+ COMPRESS tThC* YES MatC } ]P9u#f" Z XML PPD
XML D5 +xPP9u#9uP6pD}] 1,Jm+X4D#=f;*|LD{EV
{.#
CREATE TABLE TableXmlCol (id BIGINT,
xmlcol XML) COMPRESS YES
> }:TB CREATE TABLE od4(4=CUZ V xD<_m# i Z 2000 j 1 B
1 U= 2006 j 12 B 31 U.dDyP G<ZZ;vVxZ#nB D}]4? 6 v
B44(Vx#
CREATE TABLE Patients ( patientID BIGINT, visit_date DATE, diagInfo XML,
prescription XML )
INDEX IN indexTbsp LONG IN ltbsp
PARTITION BY ( visit_date )
( STARTING '1/1/2000' ENDING '12/31/2006',
STARTING '1/1/2007' ENDING '6/30/2007',
ENDING '12/31/2007',
ENDING '6/30/2008',
ENDING '12/31/2008',
ENDING '6/30/2009' );
© Copyright IBM Corp. 2006, 2009 37
+ XML PmSAVPm
*+ XML PmS=VPm,IZx P ADD Sd D ALTER TABLE odP8 (} ]
` M* XML DP#;vmI T P ;vr` v XML P#
> } y>}]b|,;v M ' } ] m ,||,=v XML P #(egB y > :
CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY,
4(;v{* MyCustomer Dmw * Customer D 1>,"mS ;v XML P4hvM
'D2C#
CREATE TABLE MyCustomer LIKE Customer;
ALTER TABLE MyCustomer ADD COLUMN Preferences XML;
> }:+ COMPRESS tThC* YES MatC } ]P9u#f" Z XML PPD
XML D5 +xPP9u#9uP6pD}] 1,Jm+X4D#=f;*|LD{EV
{.#
ALTER TABLE MyCustomer ADD COLUMN Preferences XML COMPRESS YES;
> }:TB CREATE TABLE od4(4=CUZ V xD<_m# i Z 2000 j 1 B
1 U= 2006 j 12 B 31 U.dDyP G<ZZ;vVxZ#nB D}]4? 6 v
B44(Vx#
CREATE TABLE Patients ( patientID INT, Name Varchar(20), visit_date DATE,
diagInfo XML )
PARTITION BY ( visit_date )
( STARTING '1/1/2000' ENDING '12/31/2006',
STARTING '1/1/2007' ENDING '6/30/2007',
Info XML,
History XML)
ENDING '12/31/2007',
ENDING '6/30/2008',
ENDING '12/31/2008',
ENDING '6/30/2009' );
TB ALTER modmS PX<_&=E "Dm ; XML P:
ALTER TABLE Patients ADD COLUMN prescription XML ;
ek= XML PP
* +}]ek= XML PP,I 9 C SQL INSERT o d#XML PD d kXk G q =
<CD XML D 5,g XML 1.0 f6Py(e DGy#&C Lr}]` MITG
XML "V{r~xF`M #
(i(}wd?x;GVf 5ek XML }], Tc DB2 }]b~qw I T9Cw
?}]`M 47(;)`k E"#
&C LrPD XML }]ICdrP/V{.q=#+ } ]ek= XML PP1,|X
k*;*d XML Vcq=#g{&C L r}]` MG XML }]` M,G4 DB2 }
] b~qw+~=4PKYw#g{&C Lr}]
kYw1IT =wC XMLPARSE / },T+ }]SdrP/ V{.q= *;* XML
Vcq=#
Z D5ekZd,9I\k*kT Q " a D XML #=i$ XML D 5#IT9C
XMLVALIDATE /}44PKYw#
38 pureXML 8O
d
`M;G XML `M,G4Z4 Pe
B P>}5w K gN+ XML }]e k = XML P P#b)>} 9 Cm MyCustomer ,
|Gy> Customer mD1 >#*ekD XML }]ZD~ c6.xml P,"R4p4g
B y>:
<customerinfo Cid="1015">
<name>Christine Haas</name>
<addr country="Canada">
<street>12 Topgrove</street>
<city>Toronto</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N8X-7F8</pcode-zip>
</addr>
<phone type="work">905-555-5238</phone>
<phone type="home">416-555-2934</phone>
</customerinfo>
>}:Z JDBC &C LrP,T~x F}]D N=A!D~ c6.xml PD XML }],
"+}] ek= XML PP:
PreparedStatement insertStmt = null;
String sqls = null;
int cid = 1015;
sqls = "INSERT INTO MyCustomer (Cid, Info) VALUES (?, ?)";
insertStmt = conn.prepareStatement(sqls);
insertStmt.setInt(1, cid);
File file = new File("c6.xml");
insertStmt.setBinaryStream(2, new FileInputStream(file), (int)file.length());
insertStmt.executeUpdate();
XML bv
>}:Z2,6k= C &C LrP,+}]S~xF XML wd?ek= XML PP:
EXEC SQL BEGIN DECLARE SECTION;
sqlint64 cid;
SQL TYPE IS XML AS BLOB (10K) xml_hostvar;
EXEC SQL END DECLARE SECTION;
...
cid=1015;
/* Read data from file c6.xml into xml_hostvar */
...
EXEC SQL INSERT INTO MyCustomer (Cid,Info) VALUES (:cid, :xml_hostvar);
XML bvG + XML }]SdrP/V{ .q =*;*Vcq =D}L#
I TC DB2 }] b ~qw~=4Pb v ,2 I TT=4P XML bv#
~=
XML
bv
Z BPiv B xP
:
v 9C`M* XML Dwd?r 9C`M* XML DN }jG+}]+]A}]b~q
w 1
}]b~qwZs(wd?rN }jGD5T cZod&mZd 9C 1xP bv
Z bVivB,Xk9C~ = bv#
v Z INSERT " UPDATE " DELETE r MERGE o d P+
V{ .} ]`M
(character "graphic r binary )Dwd?"N}jGr SQL mo =8(x XML P
1#1 SQL `kw ~ =+ XMLPARSE / }mSACod 1xP bv#
Z 4 B ek XML }] 39
T dk XML } ]wC XMLPARSE / }1 ,4P
T =
XML
bv
# ITZS\ XML
}]`MDNNOBDP9C XMLPARSE Da{#}g,IT+a{8(x XML P
r +|Cw`M* XML Df" }LN}#
XMLPARSE /}ICG XML"V{r~xF}]`Mw*dk#TZ6k=/, SQL
&C Lr,h *+m> XMLPARSE D d kD5D N }
jG*;*`&D}]`M#}
g:
INSERT INTO MyCustomer (Cid, Info)
VALUES (?, xmlparse(document cast(? as clob(1k)) preserve whitespace))
TZ2,6k= SQL &C Lr,;\+ XMLPARSE / }Dwd?Td?yw* XML
`M(XML AS BLOB"XML AS CLOB r XML AS DBCLOB `M)#
XML bvMUq&m
Z ~=rT = XML bvZd, + } ]f" Z }]bP1, I T X FG#t9 G %t_
gUqV{#
y ] XML j<,U q GD5PCZ a _ IATDd t V{(U+0020 )"X5 {
(U+000D )" ;P{ (U+000A )rFm{ (U+0009 )#1NNb)V{ w*D > V
.D;?VvV1, ;+|GS*Uq#
{
_gUq
G vVZ* X.dDUqV{#}g,ZT B D5P,<a> k <b> T0 </b>
k </a> .dDUqG_g Uq#
<a> <b> and between </b> </a>
(}T=wC XMLPARSE, I T 9 C STRIP WHITESPACE r PRESERVE
WHITESPACE !n4XFGq#t _g Uq#1!P* G%t_g Uq#
(}~= XML bv:
v g{d k }]`M; G XML `Mr4* ;* XML }]`M,G4 DB2 } ]b~
qw\G%tUq#
v g{d k}]`M G
XML }]`M,G4IT 9C CURRENT IMPLICIT
XMLPARSE OPTION (CDfw4XFGq#t _gUq# IT+K(CD fwh
C * STRIP WHITESPACE r PRESERVE WHITESPACE #1!P * G%t_gU
q#
g {9C XML i $,G4 DB2 } ]b~qw+vT CURRENT IMPLICIT
XMLPARSE OPTION (CDfw,";9 Ci$fr47(BP>
}PG%t9 G#
tUq:
xmlvalidate(? ACCORDING TO XMLSCHEMA ID schemaname )
xmlvalidate(?)
xmlvalidate(:hvxml ACCORDING TO XMLSCHEMA ID schemaname )
xmlvalidate(:hvxml)
xmlvalidate(cast(? as xml) ACCORDING TO XMLSCHEMA ID schemaname )
xmlvalidate(cast(? as xml))
40 pureXML 8O
ZKivB,? m> XML }] ,x :hvxml G XML wd?#
P X XML i$gN 0 lUq&m==DE ",kND XML i$#
XML j<8( xml:space tT,| CZXFG%t9 G#t XML }]PDUq#
xml:space tT2G NNUqhCTx P ~ = rT = XML bv#
} g,ZTBD5P ,^[ XML b v !n g N,\G#t} C Z <b> 0 s DUq,
r*b)Uq ;Z_ PtT xml:space="preserve" DZ cZ
<a xml:space="preserve"> <b> <c>c</c>b </b></a>
:
+ G,ZTBD 5 P,ITC XML bv!n X F }CZ <b> 0 s D Uq,r*b)
Uq;Z_ PtT xml:space="default" DZ cZ:
<a xml:space="default"> <b> <c>c</c>b </b></a>
G Unicode }]bPD XML bv
+ XML D5+ ]AG Unicode }]b 1,WHD5SM'z + ]A?j }]b~q
w 1axPzk3*;,;sZD5+]A DB2 XML bvw1a x Pzk3*;#9
C `M* XML Dwd?rN} j G+] XML D 5 I\bxPzk3*;#g{9C
}]`M(CHAR"VARCHAR"CLOB r LONG VARCHAR)+] XML D5,
V{
G 4zk3*;I \ <B}k XML }]Z4|,Z ? j } ]bzk3PDNNV{D
f ;V{#
* \b}kf;V{0 Q ek XML }]D1Z5 M ,& 7 # 9CV{ } ]`Mb v
XML }] 1,4
NNV{,I9C .xFr .yxF V{5e}C48(} 7D Unicode zk c#}
g,> or > IC48( > (sZE )V{#
D5P DyPzkc<Z?j}]bzk3P#TZ;ZKzk3PD
9I9C ENABLE_XMLCHAR dCN }4XFGqTV{}]`
M tC XML bv#
+ ENABLE_XMLCHAR hC*“NO” Ih99CV{}]`M1DT=M~= XML b
v#
XML bvM DTD
g {d k }]|,Z?D5`Myw(DTD )r}Cb ? DTD, G 4 XML bv}L
9alib) DTD Do(#Kb,bv}L9 :
v &C Z?Mb ? DTD (eD1!5
v )95e}CMN }5e
>}
TB>}5wZ;,iv BgN&m XML D5P DUq#
> }:D~ c8.xml |,TB D 5:
<customerinfo xml:space="preserve" Cid='1008'>
<name>Kathy Smith</name>
<addr country='Canada'>
<street>14 Rosewood</street>
<city>Toronto</city>
<prov-state>Ontario</prov-state>
<pcode-zip>M6W 1E6</pcode-zip>
</addr>
<phone type='work'>416-555-3333</phone>
</customerinfo>
Z 4 B ek XML }] 41
Z JDBC &C LrP,SD~PA! XML D5, ;s+}]ek=m MYCUSTOMER
D XML P INFO P,CmGy > Customer m D1>#C DB2 }]b~qw4P~
= XML bvYw#
PreparedStatement insertStmt = null;
String sqls = null;
int cid = 1008;
sqls = "INSERT INTO MyCustomer (Cid, Info) VALUES (?, ?)";
insertStmt = conn.prepareStatement(sqls);
insertStmt.setInt(1, cid);
File file = new File("c8.xml");
insertStmt.setBinaryStream(2, new FileInputStream(file), (int)file.length());
insertStmt.executeUpdate();
4 8 ( U q & m = = , r K I C 1 ! P * : % t U q # + G , D 5 | ,
xml:space="preserve" tT,rK#tUq#bm>+#tD5P*X .dDX5{"
;P{MUq#
g{lwf" D}],G4 Z ]4p4 gBy>:
<customerinfo xml:space="preserve" Cid='1008'>
<name>Kathy Smith</name>
<addr country='Canada'>
<street>14 Rosewood</street>
<city>Toronto</city>
<prov-state>Ontario</prov-state>
<pcode-zip>M6W 1E6</pcode-zip>
</addr>
<phone type='work'>416-555-3333</phone>
</customerinfo>
>}:Y(TBD5 ;Z BLOB wd? blob_hostvar P#
<customerinfo xml:space="default" Cid='1009'>
<name>Kathy Smith</name>
<addr country='Canada'>
<street>15 Rosewood</street>
<city>Toronto</city>
<prov-state>Ontario</prov-state>
<pcode-zip>M6W 1E6</pcode-zip>
</addr>
<phone type='work'>416-555-4444</phone>
</customerinfo>
Z 2,6k= C &C LrP,+wd?PDD5ek=m MyCustomer D XML P Info
P#C wd?; G XML ` M , r K h*T = 4 P XMLPARSE # 8( STRIP
WHITESPACE T}%N N_gUq#
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE BLOB (10K) blob_hostvar;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL INSERT INTO MyCustomer (Cid, Info)
VALUES (1009,
XMLPARSE(DOCUMENT :blob_hostvar STRIP WHITESPACE));
D 5| , xml:space="default" tT,rK8(K STRIP WHITESPACE D
XMLPARSE +XF Uq&m==#bm > +}%D5P*X .d DX 5{";P {M
Uq#
42 pureXML 8O
g{lwf" D}],G4 z+4 =_PTBZ ]D% vP:
<customerinfo xml:space="default" Cid='1009'>
<name>Kathy Smith</name><addr country='Canada'><street>15 Rosewood</street>
<city>Toronto</city><prov-state>Ontario</prov-state><pcode-zip>M6W 1E6</pcode-zip>
</addr><phone type='work'>416-555-4444</phone></customerinfo>
> }:Z C oT &C LrP,w d? clob_hostvar |,TBD5,C D 5 | ,Z?
DTD:
<!DOCTYPE prod [<!ELEMENT description (name,details,price,weight)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT details (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT weight (#PCDATA)>
<!ENTITY desc "Anvil">
]>
<product pid=''110-100-01'' >
<description>
<name>&desc;</name>
<details>Very heavy</details>
<price> 9.99 </price>
<weight>1 kg</weight>
</description>
</product>'
+}]ek=m MYPRODUCT P,C m Gy> PRODUCT mD1 >:
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE CLOB (10K) clob_hostvar;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL insert into
Product ( pid, name, Price, PromoPrice, PromoStart, PromoEnd, description )
values ( '110-100-01','Anvil', 9.99, 7.99, '11-02-2004','12-02-2004',
XMLPARSE ( DOCUMENT :clob_hostvar STRIP WHITESPACE ));
XML }]j{T
XML PDli<x
XMLPARSE 8(%tUq,rK+} %D5Z D_gUq#Kb,Z}] b~ qw 4
P XMLPARSE 1,|+ 5 e}C &desc; f ;*|D5#
g{lwf" D}],G4 z+4 =_PTBZ ]D% vP:
<product pid="110-100-01"><description><name>Anvil
</name><details>Very heavy</details><price> 9.99 </price>
<weight>1 kg</weight></description></product>
h *7# XML D5q-X(frr{OX(&m*s,I4P=S XML }]j{T
lir8(4P Yw0Xk{OD=Su~# a)K7# XML }]j{TD;);,
=( ,y!D =( !vZX(} ] j{TM&m*s#
g{** XML D5("
w },9I?FZyPD5D XML PP (;,dZcIzT
d("w}D XML #=^(#kND “UNIQUE X|Vo e” T Kb|`E"#
li<x JmzT XML PhCX (<x#?N" TZ XML PPekr|B}] 1 a
? F5) K<x;v1{O < x 8 (Du~1Ea 4 PKYw#
Z 4 B ek XML }] 43
& m XML D51,;vX * "b B nGH0 G qT XML # = i$Kb)D5#g{
h*7 # vi/" e k"| Br> } { OX(i$ u~DD 5 , G 49C VALI-
DATED =J4a)u ~#"b, l i<xv ;ai$ XML D5,|;ab TGqi
$K
XML D5#
2
VALIDATED =Jli XML-expression 8(D 5Di $4,,C 5Xk* XML }]
` M#g{48(I! according-to-clause,G4CZ i $ D XML #=;a0la{#
l i<x ; a i$ XML D5>m;<xv b TD5D1 0i$4,(IS VALI-
DATED r IS NOT VALIDATED)#g{8(K according-to-clause,G4CZ i $
XML-expression 8(D
5D XML #=Xk G according-to-clause j 6 D XML #=#
zh*Hr XML #=f" b"a XML #=,E \Z VALIDATED =JP}Cb)
#=#
"b:
v li<x@5Z|G }CD XML # =#g{Q>} XML # =D XSR Ts,G4
9a>}}CC#=DNN< x#
v XML P'V NOT NULL <
x#
v XML P'VT XML i$(eDE"<x#
li<xs5
li<xy] IS VALIDATED =JDdvbTD5Di$4,#g{zc8(Du~,
G 4<xs5* true ,g{;zc 8 (Du~, G 4dvs5* false #g{ XML-
expression 8(D 5*U,G4 =Ja{ 4 *#
g { XML-expression 8(D 5 ;*U"RvVT B i v,G4
VALIDATED =JDa
{* true:
v 48( according-to-clause "RQi $ XML-expression 8(D 5,r_
v Q8( according-to-clause,"R Q9CI according-to-clause j 6D XML # =.
;i$K XML-expression 8(D 5#
g { XML-expression 8(D 5 ;*U "RvVTB i v,G4C=JDa{* false :
v 48( according-to-clause "R 4i$ XML-expression 8(D 5
,r_
v Q8( according-to-clause "R49CI according-to-clause j6D XML #= . ;
i$ XML-expression 8(D 5#
Z 8(KI! according-to-clause Di v B,g{P4i$ XML-expression 8 (D 5 r
_ i$K XML-expression 8 (D 5 +4@]NN8( XML #=,G4 IS NOT VALI-
DATED +5X true#
H[mo=
VALIDATED =J
value1 IS NOT VALIDATED optional-clause
H[ZQw u ~
NOT(value1 IS VALIDATED optional-clause)
2. g{h*Z XML PPf" XML D5 .0T/i $ XML P,I9C BEFORE %"w#
44 pureXML 8O
>}
>}:v!qQ i$ XML D5#Y(Zm T1 P(eKP XMLCOL# vlwQ-}
NN XML #=i$D XML 5#
SELECT XMLCOL FROM T1
WHERE XMLCOL IS VALIDATED
> }:?F5) TBfr:}G- } i $ ,qr;a e kr|B N N 5 #Y(Zm T1
P(eKP XMLCOL "R+l i<xmS A XMLCOL#
ALTER TABLE T1 ADD CONSTRAINT CK_VALIDATED
CHECK (XMLCOL IS VALIDATED)
> }:<x INFO_CONSTRAINT G E"T < x#;a?F4PTBf r :}G-}i
$,qr;a ekr|B 5#
CREATE TABLE xmltab (ID INT,
DOC XML, CONSTRAINT INFO_CONSTRAINT CHECK (DOC IS VALIDATED) NOT ENFORCED)
E"T<xCZ Dxi/ T\#
XML }]D%"w &m
% "wT INSERT "UPDATE r DELETE od4PDYwv vl & # & m XML }]
1,I 9C CREATE TRIGGER odT XML P4(x P UPDATE !nD BEFORE
r AFTER %"w# 9 IT|( XML PDm4(x P INSERT r DELETE !nD
BEFORE r AFTER %"w#
Z %"wweP,}C\ 0 lPP`M* XML DP D *;
d ?;\k XMLVALIDATE
/ }d O 9CxPi$,T + XML P5h C * NULL ,r#t XML P5;d#
Z XML PPf" XML D5.0,I9Ck INSERT r UPDATE oddO9 C D
BEFORE %"w4T/i$b)D5#T"a XML #=i$ XML D5 GI! Yw,
+?R(i}]j{T
;7(1byv,-rGbyIT7#;ekr|BP 'D XML
D 5#
z chCu~1a $ n%"w;g{4 8 (NNu~,%"w \ G&Z$n 4 ,#g
{#{v1X*1E%"T XML D5D i$,G4I8( XML PDu~0 BEFORE
%"wD WHEN
Sd#Z WHEN SdP,I|(T XML D5D Xhi $ 4,:4
b )D5X k Qi$r _ ;(;\i$ b )D5T$n%"w(IS VALIDATED r IS
NOT VALIDATED)#I!q(}8( ACCORDING TO XMLSCHEMA Sd4| (;
v r` v XML #=,T f _%"wZT < xs5 1 &<GD) XML # =
#
":8( WHEN SdD%"wa < Bnb*z#g{< U &Zek XML D5.0x
P i$,G4I!T WHEN Sd#
} C XML #=DNN%"w @ 5ZC#=#XkHZ XML # =f" bP"a XML
#=,;sE \}C XML #=#g{%"wy@5D XML
#=!s4; XML #
= f" b>},G4%"wa;j G*; I Yw#
> }:4(TB BEFORE % "w:Z SAMPLE }]bD PRODUCT mPek|,B
z7hvD XML D 5.0,C%" waT/i$b)D5#K% " waZ|B XML
D 5.0 D Nb1d$ n#
Z 4 B ek XML }] 45
CREATE TRIGGER NEWPROD NO CASCADE BEFORE INSERT ON PRODUCT
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
SET (N.DESCRIPTION) = XMLVALIDATE(N.DESCRIPTION
ACCORDING TO XMLSCHEMA URI 'http://posample.org/product.xsd');
END
>}:]x XML #= product2.xsd .s,Q-f" D XML D5Z ]x#=B#$
P ',;*|GT-< XML # = product.xsd P '#+G,zI \ k*7#Tb )
XML D 5DyP|BZ]x#= product2.xsd B,yP'# r XML #= f"b"a
product2.xsd Ts, BEFORE UPDATE %"waZxPNN| B0
CREATE TRIGGER UPDPROD NO CASCADE BEFORE UPDATE ON PRODUCT
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
SET (N.DESCRIPTION) = XMLVALIDATE(N.DESCRIPTION
ACCORDING TO XMLSCHEMA ID product2);
END
i$ XML D5:
> }:zk*Zm ;vmPG<ekr | BM'G<#b * s z 4(=v % "w,;
v AFTER INSERT CZ BekDG<,; v AFTER UPDATE CZ |BDG<#Z
B fD>}P,Iy]m MyCustomer D XML PE "4(% "w,CmGy > Cus-
tomer mD1 >#
W HT MyCustomer m4( AFTER INSERT
CREATE TRIGGER INSAFTR
AFTER INSERT ON MyCustomer
REFERENCING NEW AS N
FOR EACH ROW
BEGIN ATOMIC
END
;sT MyCustomer m4( AFTER UPDATE %"w:
CREATE TRIGGER UPDAFTR
AFTER UPDATE OF Info
ON MyCustomer
REFERENCING NEW AS N
FOR EACH ROW
BEGIN ATOMIC
END
XML i$
XML i$G7( XML D5D a9"Z]M}]`M GqP'D }L# XML i$2
a %t XML D 5 P D
(1byv,-rGbyI T 7# XML D5Zq=<C D ,1qXd XML # = a)
Dfr#
%"w:
INSERT INTO CustLog VALUES(N.CID, CURRENT TIMESTAMP, 'Insert');
INSERT INTO CustLog VALUES(N.CID, CURRENT TIMESTAMP, 'Update');
IvT Uq
# i$YwGI !D,+?R(iZ}]j{T;7
46 pureXML 8O
"b,;\kT XML # =i $ XML D5#;\T DTD i $ XML D5#
*i $ XML D 5 ,k 9C XMLVALIDATE / } #
I 9 C SQL o d 8(
XMLVALIDATE TZ DB2 }]bPekr|B XML D5# *KT/i$ XML D
5 ,kT XML P D BEFORE %"w9I w C XMLVALIDATE /}#*?Fi $
XML D5,I4(li<x#
X kHZZC XML # =f" bP"a9I XML #=DyP # =D5,;sE\wC
XMLVALIDATE /}# XML D5>m; XZ}]bP M\; Z XMLVALIDATE P
xPi$:
XML i$MI vTUq
y] XML j<,
U q
GD5PCZ a_IAT DdtV{(U+0020 )"X5 {
(U+000D )" ;P{ (U+000A )rFm{ (U+0009 )#1NNb)V{ w*D > V
{ .D;? V vV1,;+|G S *Uq#
IvT Uq
G IS XML D5P}% D U q#XML # = D57(DvU q G IvT U
q#g{ XML D5(ev*X 4S`M(v|,d{* XD* X),G4IvT*X
.dDUq#g{ XML #=(e|,GV{.`MDr % *X,G4IvTC*XZ
Uq#
D
> }:4gBy>(ey> XML # = D5 product.xsd P D description * X :
<xs:element name="description" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0" />
<xs:element name="details" type="xs:string" minOccurs="0" />
<xs:element name="price" type="xs:decimal" minOccurs="0" />
<xs:element name="weight" type="xs:string" minOccurs="0" />
...
</xs:complexType>
</xs:element>
description *X_Pv*X4S`M,r*|;|,d{*X#rK,description *
X PD* X .dDUqG I vT U q#price * X 2I T |,I v TUq, r * | G|
,GV {.`MDr %*X#
Z XMLVALIDATE /}P,ITT = 8(*CZ i$D XML #=D 5 #
g{;8(
XML #=D5, G4 DB2 }]b~qw+Z dkD5PiRj 6 XML #=D5D
xsi:schemaLocation r xsi:noNamespaceSchemaLocation tT# xsi:schemaLocation r
xsi:noNamespaceSchemaLocation tTI XML #=f6(e,F* XML
#=a >
#
xsi:schemaLocation tT|,;vr` v 5T,|GI o ziR XML #=D5#?v
5T PDZ ;v 5G{FUd,Z~v 5Ga >,| 8>{FUdD XML # =D;
C# xsi:noNamespaceSchemaLocation 5; | ,a> #g{ XML #= D5 GZ
XMLVALIDATE / } P8( D , G 4 |+ 2G xsi:schemaLocation r
xsi:noNamespaceSchemaLocation tT#
>}Y( product # =GZ XML # =f" b(XSR)P"aD# IT 9Cng
BP
T BD CLP od4jI"a:
REGISTER XMLSCHEMA http://posample.org/product.xsd FROM product.xsd \
AS myschema.product
COMPLETE XMLSCHEMA myschema.product
r _,r* XML #=I%v # =D5iI,yTI T 9C%vod4"a XML #=
"jI" a:
REGISTER XMLSCHEMA http://posample.org/product.xsd FROM product.xsd \
AS myschema.product COMPLETE
>}:Y(4gBy>4(m MyProduct:
Z 4 B ek XML }] 47
CREATE TABLE MyProduct LIKE Product
z*9C/, SQL &C Lr+ TBD5ek = MyProduct m D XML P Info P,"
R *kT XML #=D5 product.xsd i$ XML }],CD5 ;Z MyProduct my
Z D}]b~qwO D XML #=f" bP#
<product xmlns="http://posample.org" pid=''110-100-01'' >
<description>
<name>Anvil</name>
<details>Very heavy</details>
<price> 9.99 </price>
<weight>1 kg</weight>
</description>
</product>'
Z INSERT odP, XMLVALIDATE /}8(*CZ i $D XML #=:
Insert into MyProduct
(pid, name, Price, PromoPrice, PromoStart, PromoEnd, description)
values ( '110-100-01','Anvil', 9.99, 7.99, '11-02-2004','12-02-2004',
XMLVALIDATE(? ACCORDING TO XMLSCHEMA ID myschema.product))
l wf" D}]1 ,zIT 4 = XMLVALIDATE }% I vT U qD;C#lw=D }
]G _PTBZ]D% vP:
<product xmlns="http://posample.org" pid="110-100-01"><description><name>Anvil
</name><details>Very heavy</details><price>9.99</price><weight>1 kg</weight>
</description></product>
product #=(e name"details"price M weight *X\'DUq,d P price *
X ZDUq(e* I vT U q,rK XMLVALIDATE +}% C U q#
g{h* 7#v+ Qi$DD 5ek= XML PP,rvS XML PPlwQi $ DD
5,G49C VALIDATED =J#
*bTG qZ ekr|B
XML D50i$KC D5,kT XML P4(|, VALI-
DATED =JDli<x#* S XML PPvlwQi $DD 5,rvlwQek+4
i $DD 5 ,IZ WHERE Sd P 9C VALIDATED =J#g{h*li G qy]X
( XML #=i$K XML D5,kZ ACCORDING TO XMLSCHEMA SdP9C
VALIDATED =J4| ( XML #=#
VALIDATED =J9ICw %"wD;? V#*Z XML PPekr|B XML D5
.0%"TP4i $ D XML D 5D i$,kZ WHEN SdP4(|,kT XML P
D VALIDATED =J D BEFORE %"wT wC XMLVALIDATE /}#
> }:Y(zkS MyCustomer mD INFO PP; l wQ
i $D XML D 5 # 4 P`
F TBD SELECT od:
SELECT Info FROM MyCustomer WHERE Info IS VALIDATED
> }:Y(zk+Qi$D XML D 5 ;ek= MyCustomer m D INFO P P #I T
(eli<x4?F4 PKu ~#4 TB==Dd MyCustomer m:
ALTER TABLE MyCustomer ADD CONSTRAINT CK_VALIDATED CHECK (Info IS VALIDATED)
48 pureXML 8O
+ G,"vKod 9 C ;X9CO;v > }P D VALIDATED =J,r * ;\Zm P
I&ekr|BP 'D5#
>}:Y(zk*9C customer #=i$TBD5,+; k+|f" Z }]bP#
<customerinfo xml:space="default"
xmlns="http://posample.org"
Cid='1011'>
<name>Kathy Smith</name>
<addr country='Canada'>
<street>25 Rosewood</street>
<city>Toronto</city>
<prov-state>Ontario</prov-state>
<pcode-zip>M6W 1E6</pcode-zip>
</addr>
<phone type='work'>416-555-6676</phone>
</customerinfo>
Y(Q+D58 (x&C Lrd?#IT9C`F TBD VALUES od4x Pi$:
VALUES XMLVALIDATE(? according to xmlschema id myschema.customer)
y ] XML #=KD5P',r K VALUES o d 5X|, C D5Da{m#g { C D
5^',G4 VALUES 5X SQL m s#
XSR_GET_PARSING_DIAGNOSTICS f"}L
f" }L XSR_GET_PARSING_DIAGNOSTICS zIbvri$ XML D51y"zm
sDj8 E"#Kf" }LICZ (fb vm sMi$m srv(f b vm s#
g { Z b v r i $ XML D ~ Z d " z m s , k S DB2 | n 0 Z w C
XSR_GET_PARSING_DIAGNOSTICS f" }Lr_+Kf" }LmSA&C Lr#}
g ,9C XMLVALIDATE j
Zdy"zmsDj8 E"#
?/}i$ XML D5 1,k 9CKf" }L4z Ii$
o(
XSR_GET_PARSING_DIAGNOSTICS ( instance , rschema , name ,
schemaLocation , implicitValidation , errorDialog , errorCount )
Kf"}LD#=* SYSPROC#
(^
XML # =Z(:CZ i$D XML #=XkZ XML #=f"bP"a.sE\9C#
Kf"}LDZ(j 6XkAY 5PBPdP; nX(M ( ^:
v TCZ i$D XML #= D USAGE X(
v DBADM (^
}LN}
instance
BLOB(30M) `MDdkN },||, XML D5D Z]#Xka) XML D5#
K 5;\* NULL#
rschema
VARCHAR(128) `MDdkN } ,|8(r XML #= f"b"aD= ? V XSR
Ts{D SQL #=?V#K5I* NULL #g{K5* NULL ,G4Y( SQL #
=?V G CURRENT SCHEMA (CDfwD1 0
5#
Z 4 B ek XML }] 49
name
VARCHAR(128) `MDdkN } ,|8(r XML #= f"b"aD= ? V XSR
Ts{D#= {#XML #=Dj{ SQL j6* rschema.name #| TZ XSR P
D yPTs & CG(; D #K5I* NULL #
schemaLocation
VARCHAR(1000) `MDdkN } ,|8 > XML #=wD 5D#=;C#KN }
G XML # =D
tT4j 6wD5#K 5I* NULL#
implicitValidation
INTEGER `MDdkN },|8 >Gq&C 9C 5 }D5P D#= ;C 4iR
XML #=#K5; \* NULL#|D5IT* 0(m> “q ”)M 1(m> “G ”)#
9 C 5 }D5PD#=;C#g{+]D5* 0,G4IT9CBPdP;V
0 ;
=(48(#=:
v + XSR Ts{w*Z XML #=f" bP"aD # =D rschema M name
N}4a)#
v 9C schemaLocation N } 4a)# = ;C#
b ?{,4 ,ITZ XML 5}D5P 9 C xsi:schemaLocation
g {,18(K XSR T s{M schemaLocation ,G 4 +
{48(NN;n,G4;a4Pi $#v4P XML bv,"(fyP XML
bvm s#
1 9C 5}D5P D xsi:schemaLocation tT5D# =;C#
y ]H0 r XML #=f" b"aD XML #=D54T d kD54Pi $ #
g{ implicitValidation N}D5* 0
D5* NULL,G4+b v5} D 5+;aT|xPi$#
errorDialog
VARCHAR(32000) `MDdvN } ,||,+P > bvMi$m s D UTF-8 XML
D5#v 1AYP;vm s1,EazIK D5#
errorCount
` M* INTEGER DdvN } ,CZ 8( XML b v Mi$m s D
,x rschema "name M schemaLocation N}
9C XSR Ts{#g
\ }#
C(
IT(} TB}V=( 4kT Q"aD XML #=i$ XML D 5:
v 9C rschema M name N }* XML # =a) XSR Ts{#
v 9C schemaLocation N }4a)# =;C#
v g { XML 5}D5+# = 8 ( * xsi:schemaLocation tTD5, G 4 +
implicitValidation hC* 1#
50 pureXML 8O
g {9C XSR_GET_PARSING_DIAGNOSTICS f" } L1"zbvr
hC errorDialog M errorCount dvN }#errorDialog | ,;vCZ P>msD XML
D 5 # I T S 9 C DB2 CLI " Java r C++ D &C L r P w C
XSR_GET_PARSING_DIAGNOSTICS f" }L,"9C N}jG4q!Kf" }LD
dv#
i$ms,G4
T> j8D XML bvMi$m s
IT9C XSR_GET_PARSING_DIAGNOSTICS f" }LP errorDialog dvN }P
DE"4bv XML bvMi$m s#
g {9C XMLVALIDATE j?/ } 4i$ XML D5 1 "zms,G4k 9 C
XSR_GET_PARSING_DIAGNOSTICS f"}L4z I j8DmsE"#T B>}+
XSR_GET_PARSING_DIAGNOSTICS f"}Lkr %D XML #=M XML D5dO
9C4zIj8 Di$m
y> XML #=
K >} 9 CTB XML # = (e(XSD )#K#=_PwV*X,d P INTEGER `M
tTD*X8(x Age *X#
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://my.simpletest"
xmlns="http://my.simpletest"
elementFormDefault="qualified">
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name">
<xs:complexType>
<xs:sequence>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Age" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
sE"#
y> XML D5
TB XML D5+Iy> XML #=xPi$#KD5;{O 3)#=fr# Age *
X D5;G} V, "RZK#= P 4+ Notes * X (e* Person * X DS* X #
<?xml version="1.0"?>
<Person xmlns="http://my.simpletest"
<Person>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://my.simpletest http://my.simpletest/simple">
<Name>
<FirstName>Thomas</FirstName>
<LastName>Watson</LastName>
</Name>
<Age>30x</Age>
<Notes/>
C4"a XML #=D|n
Z 9C XSR_GET_PARSING_DIAGNOSTICS f" }L4i$ XML D5 .0,Xk Z
DB2 XML #= f"b( XSR) P"a CZi$D XML #=#TB REGISTER
XMLSCHEMA |nY(#=;Z c:\temp\simpleschema.xsd P,"R SQL #=*
USER1:
Z 4 B ek XML }] 51
REGISTER XMLSCHEMA 'http://my.simpletest/simple'
FROM 'file:///c:/temp/simpleschema.xsd'
AS user1.simple COMPLETE
wCTzIj8 Di$msE"
T BwCS CLP 9 C XSR_GET_PARSING_DIAGNOSTICS f" }L4zIi$msE":
CALL XSR_GET_PARSING_DIAGNOSTICS(
blob('<?xml version="1.0"?>
<Person xmlns="http://my.simpletest"
<Name>
</Name>
<Age>30x</Age>
<Notes />
</Person>
'),'','','',1,?,?)@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://my.simpletest http://my.simpletest/simple">
<FirstName>Thomas</FirstName>
<LastName>Watson</LastName>
j8Di$msE "
w C XSR_GET_PARSING_DIAGNOSTICS f" }L+5XTBd v #errorDialog N
}D5 G;v|,i$msj8 E"D XML D5#Z K XML D5 P,errText "
location "lineNum M colNum *XDZ]j6X(msT0"zmsD ;C# S CLP
| nPK P H0wC1,T B dv+ 4 Aj<dv:
dvN }D5
--------------------------
N}{F:ERRORDIALOG
N}5:<ErrorLog>
<XML_Error parser="XML4C">
<errCode>238</errCode>
<errDomain>http://apache.org/xml/messages/XML4CErrors</errDomain>
<errText>Datatype error: Type:InvalidDatatypeValueException,
Message:Value '30x' does not match regular expression facet '[+\-]?[0-9]+' .
</errText>
<lineNum>1</lineNum>
<colNum>272</colNum>
<location>/Person/Age</location>
<schemaType>http://www.w3.org/2001/XMLSchema:integer</schemaType>
<tokenCount>2</tokenCount>
<token1>30x</token1>
<token2>13</token2>
</XML_Error>
<XML_Error parser="XML4C">
<errCode>2</errCode>
<errDomain>http://apache.org/xml/messages/XMLValidity</errDomain>
<errText>Unknown element 'Notes' </errText>
<lineNum>1</lineNum>
<colNum>282</colNum>
<location>/Person</location>
<schemaType>http://www.w3.org/2001/XMLSchema:integer</schemaType>
<tokenCount>2</tokenCount>
<token1>Notes</token1>
<token2>37</token2>
</XML_Error>
<XML_Error parser="XML4C">
<errCode>7</errCode>
<errDomain>http://apache.org/xml/messages/XMLValidity</errDomain>
<errText>Element 'Notes' is not valid for content model: '(Name,Age)'
</errText>
<lineNum>1</lineNum>
52 pureXML 8O
<colNum>292</colNum>
<location>/Person</location>
<schemaType>http://www.w3.org/2001/XMLSchema:anyType</schemaType>
<tokenCount>2</tokenCount>
<token1>Notes</token1>
<token2>31</token2>
</XML_Error>
<DB2_Error>
<sqlstate>2200M</sqlstate>
<sqlcode>-16210</sqlcode>
<errText>
[IBM][CLI Driver][DB2/NT] SQL16210N XML document contained a value "30x" that
violates a facet constraint. Reason code = "13". SQLSTATE=2200M
</errText>
</DB2_Error>
</ErrorLog>
Parameter Name : ERRORCOUNT
Parameter Value : 3
5 X4, =0
v?Dms{"'V D ErrorLog XML #=(e
ErrorLog XML #=(e( XSD)hvZ XML D5Pzzb vMi$m sDivBI
XSR_GET_PARSING_DIAGNOSTICS f" }Lz ID UTF-8 XML D5#dv XML
D5f" Z errorDialog N}P#
ErrorLogType
XML #=(eDy*X G ErrorLog "Rd`M* ErrorLogType#
XML #=(e
<xs:complexType name="ErrorLogType">
<xs:sequence>
<xs:element name="XML_Error" type="XML_ErrorType" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name=name="XML_FatalError" type="XML_ErrorType" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="DB2_Error" type="DB2_ErrorType"/>
</xs:sequence>
</xs:complexType>
S*X
XML_Error
XML_FatalError
`M: XML_ErrorType
9C5w:
XML_Error r XML_FatalError *X|, XML bvwzIDm s {
"#XML_Error M XML_FatalError *X_P `,D XML #=`M#
XML_FatalError G<B XML bvwl#U9 bv}LDm s#
xs:complexType name="XML_ErrorType">
<xs:sequence>
<xs:element name="errCode" type="xs:int"/>
<xs:element name="errDomain" type="xs:string"/>
<xs:element name="errText" type="xs:string"/>
<xs:element name="lineNum" type="xs:unsignedInt"/>
<xs:element name="colNum" type="xs:unsignedInt"/>
<xs:element name="location" type="xs:string"/>
<xs:element name="schemaType" type="xs:string"/>
Z 4 B ek XML }] 53
<xs:element name="tokens">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element name="token" type="xs:string" minOccurs="0"
</xs:sequence>
<xs:attribute name="count" type="xs:unsignedByte"
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="parser" type="xs:string" use="required"/>
</xs:complexType>
maxOccurs="unbounded"/>
use="required"/>
XML_ErrorType *X|,BPS *X:
errCode
XML bvw5XDm szk#
errDomain
XML bvw5XDm sr#
errText
-<D XML bvwm s{" #
lineNum
"zmsDPE#
colNum
"zmsDPE#
location
;CG"zm s.0 8rnsD XML *X D XPath mo=#
schemaType
nsbvD XML *X D XML
#=`M#
tokens
T>(fK`Y jGD }V5#
token jGGC4zI DB2 ms{"DV{ .5#
tT
bvw(XkD )
bvwtT8( 9CDW c XML bvw#
DB2_Error
`M: DB2_ErrorType
9C5w:
DB2_Error *X|, DB2 ms{" #
<xs:complexType name="DB2_ErrorType">
<xs:sequence>
<xs:element name="sqlstate" type="xs:string"/>
<xs:element name="sqlcode" type="xs:int"/>
<xs:element name="errText" type="xs:string"/>
</xs:sequence>
<xs:attribute name="parser" type="xs:string" use="required"/>
</xs:complexType>
54 pureXML 8O
DB2_ErrorType *X|,BPS *X:
sqlstate
SQLSTATE
sqlcode
SQLCCODE
errText
DB2 ms{"
v?Dms{"'V D XML #=
XSR_GET_PARSING_DIAGNOSTICS f"}L+z IP XZbvMi$ XML D5Z
d yzzmsDj8E"# K E"w* XML D 5 z I#K#=(e f" } L DP'
XML dv#
T BPmm >I XSR_GET_PARSING_DIAGNOSTICS f" }Lz I D XML D 5D
ErrorLog XML #=#
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.ibm.com/db2/XMLParser/Diagnosticsv10"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ibm.com/db2/XMLParser/Diagnosticsv10"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="ErrorLog">
<xs:complexType>
<xs:sequence>
<xs:element name="XML_Error" type="XML_ErrorType" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="XML_FatalError" type="XML_ErrorType" minOccurs="0"/>
<xs:element name="DB2_Error" type="DB2_ErrorType"/>
<xs:any namespace="##any" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="XML_ErrorType">
<xs:attribute name="parser" type="xs:string" use="required"/>
<xs:sequence>
<xs:element name="errCode" type="xs:int"/>
<xs:element name="errDomain" type="xs:string"/>
<xs:element name="errText" type="xs:string"/>
<xs:element name="lineNum" type="xs:unsignedInt"/>
<xs:element name="colNum" type="xs:unsignedInt"/>
<xs:element name="location" type="xs:string"/>
<xs:element name="schemaType" type="xs:string"/>
<xs:element name="tokens">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element name="token" type="xs:string" minOccurs="0"
</xs:sequence>
<xs:attribute name="count" type="xs:unsignedByte" use="required"/>
</xs:complexType>
</xs:element>
<xs:any namespace="##any"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DB2_ErrorType">
<xs:attribute name="parser" type="xs:string" use="required"/>
<xs:sequence>
<xs:element name="sqlstate" type="xs:string"/>
<xs:element name="sqlcode" type="xs:int"/>
<xs:element name="errText" type="xs:string"/>
maxOccurs="unbounded"/>
Z 4 B ek XML }] 55
<xs:any namespace="##any"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
ZG Unicode }]bP 9C XML
Sf> 9.5 *<, IZ;9C Unicode zk3D}]bP f""lw XML }]#
SZ?44,XML }] <UI DB2 }] b~qwT Unicode q=\ m, ;\}]b
zk3gN<G g K#G XML X5}] GT } ]b zk3\mD#g { SQL r
XQuery od,1f0 XML }
1f0 XML }]`MM SQL }]`MDHO 1),(#h*x Pzk3*;#HO
XML }]k XML }];h*zk 3 *;,- r G =i } ]Q - G UTF-8 q=#,
y ,HO SQL }]k SQL }];h*zk
k3q=#
TZf0 XML }]M SQL }]DYw,r* Unicode }]b TyP}]`M9C`
,`k,yTQ -;h*ZK} ] bPxPz k 3*;#+G,ZG Unicode } ]b
P,f0zk3*;DYwI\a
] |,xP z kcD V{;Z} ] bzk3P,G4a"zV { f ;# r K ,} ] `
M*;r HOY wax4bba{,xS}]blw=D XML } ]I\|,;}7D
5#BfaV[\ bzk3
,=( #
] M SQL X5} ] (}g ,ZxP} ] `M*;r ,
3*;,- rG=i }] Q-G} ]bz
< B}]Y5r* '#g{}ZxP*;D XML }
*;Tc7 # Qf" XML }]Myf0Y wDj{TD;
XML D5ekMzk3*;
? N(}_PV{} ] `M("G FOR BIT DATA ` MD CHAR"VARCHAR r
CLOB }]`M)Dwd?rN }jG+ XML }]ek= DB2 }]b~qwP 1,
g{}]bzk3;,Z"vks D M'zr&C LrDzk3,G4ax Pzk3
* ;#1ekDV{}]S }
1,ra"zZ~V* ;#
B m T >}]bkS M 'zr&C LrekD XML D 5 V{..d D wVI\`ki
O #r*M'z (}V{}]`Mek XML }],yT XML D5`kkM'z zk
3f`,
# TZ?ViO,+hvzk3*;D0lM XML D5ekZd D a{V{
f;I\T#
m2.}]bkekD
=8 XML D5`k }]b `k z k3G q%d?
1. Unicode(UTF-8) Unicode(UTF-8) G
2. G Unicode Unicode(UTF-8) q
3. G Unicode G Unicode G
4. Unicode(UTF-8) G Unicode q
5. G Unicode G Unicode q
XML
1. Z=8 1 P, XML D5M}]b2C Unicode `k#ek XML D51;axP
NNV{ *;#TK==e k XML }] <U\2 +#
2. Z=8 2 P, G Unicode XML D5+*;* UTF-8 Tek= Unicode }]bP#
K }LP;a"zV { f ;#T K ==ek XML } ]<
]bzk3*;* Unicode (XML }]DZ?\mq=)
D 5V{..d D `k=8
U\2+#
56 pureXML 8O
3. Z=8 3 P, XML D5M}]b2C,;G Unicode `k#ZKivB,XML D
5;\|,}]bzk3 Z|, Dzk c,yT;aZzk 3*;ZdxPNN V
{ f;#TK = =ek XML } ] < U\2+#
4. Z=8 4 P, Unicode XML D5+ek =G
Unicode }]bP#g{ XML D5
G S UTF-8 M'zr&C LrekD((}_PV{ } ]`MDwd?rN } j
G ),G4a"zzk3*;#XML D5ZZ}]bz k 3P;P%dzkcD N
NV{+;f;#
5. Z=8 5 P, XML D5+ek = , 19C=V
;,`k(<G UTF-8 T bD`
k )D}]b~qwP#ZKivB,q =8 4 P;y,g{ XML D5G9 CV
{}]`MekD,G4Z XML D 5|, DV {Z}]bzk3P^' 1axP
V {f;#
2+X+ XML }]e k=G Unicode }]bP
7 # XML }]j{TDn2 + =(G9 C Unicode }]b#+ G , g {;\9CK
=(,9Pd{ =(Ih9 V{f;#TBPmhv9Cr;9 C Unicode }]b2+
e k XML }]DwV=(:
9C Unicode }]b,r7# }]bM M'z 9C,;`k
gZ 56 3 Dm 2
*;Jb:
v }]b 9C Unicode
v }]bM M'2C,;`k, 9Cr; 9C Unicode
Pyv,&ZBPivB1 IT; 1\b XML }]Dzk3
\b9C_ PV{ }]`MDw d?rN} jG
g {;\9C Unicode } ]b,9 I ( } 9C`M* XML r N
`MDwd?rN}jGs( XML }]4\b XML }]Dzk3*;#4,
T XML }]8 ( CHAR "VARCHAR r CLOB TbD}]`MJ m1S+
d SM'zr&C Lrzk3*;* Unicode ,SxF} * ;*}]bzk3`
kb;}L#
ENABLE_XMLCHAR dCN}Jm
ENABLE_XMLCHAR hC* “NO”ah9Z XML D5ekZd9CV{ }]
` M,Sx\bI\DV{f;"7#Qf" XML }]Dj{T#r* BLOB
M FOR BIT DATA }]Ts; \ zk3*;0l,y T T; Jm 9 Cb) }
]`M#1!
ivB,ENABLE_XMLCHAR hC*“YES” TcJmekV{}
]`M#
9 C Unicode } ] b 1 ,z k3 *; v ; I J b ,y TZ K i v B
ENABLE_XMLCHAR dCN} ;pwC; ;\ ENABLE_XMLCHAR DhC
g N,<I T XML D5e k 9CV{ } ]`M#
T 4|,Z}]bzk3PDV{ 9 C
V{5e}C
g {;\\bzk3*; "RXkT XML }]w 9 CV{ } ]` M ,nC 7
# XML D5P DyPV{Z}]bzk3P _ P%dzk c#TZ XML }
] ZZ ? j} ] bP;P%dzkcD NNV{, I 9CV { 5 e}C48(
V{D Unicode zk c#V{5e}CI;1F}zk3*;,yTaZ XML
} ]P#t}7DV{#} g ,V{ 5 e}C“ > M > Vp G
s ZE(“>” )D.yxF M .xFH[n#
N~xF}]
zXFGq(}V { }]`Mek#+
Z 4 B ek XML }] 57
ZG Unicode }]bPi/ XML }]
kZ}]bPek XML }];y,Zf0 XML }]Di/Zd 7#}]j{TDn
2 +=(G9 C Unicode }]b# g {;\9CK=( ,G4I(}7#yP XML }
]Z} ]bzk3P Im>4 \bV{f;,r_(}T} ]bzk3P4|,DV
{9CV {5e}C4\bV {f;#
g {i/|,D XML Z ] |(Z}]bzk3P;Im>DV{,G4I \ a"zB
P= V`MDV{f;,Sx < B i/vVbba{:
f;*1! f;V{
+Z XML }]P;I%dV{D; C}
{ PDV{+]= ASCII `k}]b(ISO-8859-1 ) P ,G4-<V{af ;
* ASCII zkc 0x1A ,bG;vXFV{ ,ZM'z O(#T> *JE
(“?” )#+ XML }]S }]bzk3*;* Unicode 1,a#tf ;V{ #
nS| D V{H[n(“ ~O”)
f;*
-<d kV{af ;*?jzk3Pk -<V{`F+;;(j+ `,D V
{#P1_ P;, Unicode zkcD =vr |`V {a3dA}]bzk3 O
D% vzkc(?j z k3PDn S|V{H[n ),by;4
P.s;, 5.dDnla*'#K!0 QZBf D>} 2 Pwv5w#
>}
kzk3D 1!f;V{#} g,g
e k=}]b
T B>}5w 9 C UTF-8 `kDM'zr&C Lr CZ i/G Unicode } ]bPD
XML }] 1*;zk3I\ x4D0l#Zb) >}P,Y( }]b G9Czk3
ISO8859-7(
# 0o)4(D#XQuery mo= CZ%dm T1 Pf"D XML }],d
PQf" XML }]I Unicode #0owqjV{(Σ G)M Unicode cuwqjV{
)iI#zkc 0xD3 Z ISO8859-7 }]bPj 6wq j V{#
(Σ
M
m T1 G9 CBP| n 4("ndD:
CREATE TABLE T1 (DOCID BIGINT NOT NULL, XMLCOL XML);
INSERT INTO T1 VALUES (1, XMLPARSE(
document '<?xml version="1.0" encoding="utf-8" ?> <Specialchars>
<sigma>Σ
<summation>Σ
</Specialchars>'
</sigma>
G
</summation>
M
preserve whitespace));
>} 1:I&Dzk3*; (V{Z }]bzk3P GIm >D)
XQUERY for $test in db2-fn:xmlcolumn("T1.XMLCOL")//*[. = "ΣG"] return $test
Km o=zIZ{Da{:
<sigma>ΣG</sigma>
Z KivB,mo= Σ GZ M'z OT#0owqjV{(U+03A3 )D Unicode
zkc*7,*;*#0o}] b zk3(0xD3 )PDwq jV{,;sY
* ;X }7D Unicode V {TxP XML &m# r *#0o w qj V {Z}]
b zk3PG I m>D,yT m o=a}7%d# K
V{ *;T>Z BmP:
58 pureXML 8O
m3.V{}] *;(>} 1)
M'z
(UTF-8 )
V{ U+03A3 (#0
owqj)
→ 0xD3(#0o
}]b
(ISO8859-7 )
→ U+03A3 (#0
wqj)
>} 2:;I&Dzk3*; (V{Z }]bzk3P G;Im >D)
XQUERY for $test in db2-fn:xmlcolumn("T1.XMLCOL")//*[. = "ΣM"] return $test
Km o=4zIZ{Da{:
<sigma>ΣG</sigma>
Z KivB,m o = Σ MZ M'z OTcu{Ewqj(U+2211 )D Unicode
zkc*7,*;*#0o}] b zk3(0xD3 )PDwq jV{,;sZ
xP XML H O1k Σ
` ,#Unicode XML V{ Σ
V{`%d#TZ 5Xmo=,}Lk>} 1 Pj+
G
H*;* #0o}]bzk3PDwq jV{
G
(Σ A),;s*;*M 'z UTF-8 zk3(Σ G)PD#0owqjV{#K V
{*;T>Z BmP:
m4.V {}] * ;(>} 2)
M'z
(UTF-8 )
V{ U+2211(cu
wqj)
→ 0xD3(#0o
}]b
(ISO8859-7 )
→ U+03A3 (#0
wqj)
XML bvw
(UTF-8)
owqj)
XML bvw
(UTF-8)
owqj)
>} 3: 9CV{ 5e}CF}zk 3*;
XQUERY for $test in db2-fn:xmlcolumn("T1.XMLCOL")//*[. = "ࢣ"]
return $test
Km o=zIZ{Da{:
<summation>ΣM</summation>
Z KivB,m o = Σ MZ M'z OTcu{Ewqj(U+2211 ) * 7,r*
|*e* V{}C ࢣ, yTZ+]A XML bvw1a#t Unicode z
kc,Sx\; TQ f" XML 5 Σ
xPI&DH O#F}V{ *;D }L
M
T >Z B mP:
m5.V{}] *;(>} 3)
M'z
(UTF-8 )
V{ U+2211(cu
wqjDV{}
C)
→ ″ࢣ ″(cu
}]b
(ISO8859-7 )
→ U+2211 (cu
wqjDV{}
C)
>} 4:;I&Dzk3*; (V{Z }]bzk3P G;Im >D)
K>}k >} 1 `F,+ K&9C ASCII `k }]b"RaZ XML m o=
P }kzk 3 D1!f;V{#
XQUERY for $test in db2-fn:xmlcolumn("T1.XMLCOL")//*[. = "ΣG"] return $test
XML bvw
(UTF-8)
wqj)
K i/4\%dm T1 PD}7 5 #ZKivB,Unicode V{ U+2211 (# 0
o wqj)Z ASCII z k 3P; P %dzkc,yTa } k1 !f;V{,Z
Z 4 B ek XML }] 59
K ivB*J E(“?” )#KV{ * ;T>Z B mP:
m6.V{}] *;(>} 4)
M'z
(UTF-8 )
V{ U+2211(cu
wqj)
}]b
(ISO8859-1 )
→ 0x003F(“?”) → 0x003F(“?”)
XML bvw
(UTF-8)
60 pureXML 8O
Z 5 B i/ XML }]
I (}=Vw i/o T (%@9C?V o T r ,19C=V o T)i / rlwf" Z
}]bPD XML }]#
*za)KB P!n:
v v XQuery mo=
v wC SQL od D XQuery mo=
v v SQL od
v 4P XQuery mo=D SQL od
XQuery ri
b)=( J mzS SQL r XQuery OBDPi
I T9Cb)=( i/Mlw XML D5,Nr{v XML D 5#i / IT5X,Nr
{v XML D5,"RI9C =J^FSi/CJDa{#r*T XML }]Di/5
X XML rP,yT2 IT9C XML }]9lDi/a {
XQuery Gr,x*K(W3C)hFD;V/}`LoT,CZzci/M^D XML }
]DX(hs#
k I$bD"_P#fa9D X 5}];,,XML }]IdT\_#XML }](# G
;I$ b"!hMTh vD #
IZ XML }]Da9;I$ b ,yT
i/ ;,#XQuery oTa)K4Pb )` M YwyhDin T#}g,I \ h *9 C
XQuery oT4PBPYw:
v Qw cNa9P3)4 * cTsD XML }]#
v T}]4Pa9d;(}g ,zI \k
v 5X_P lO`MDa{#
v |BVP XML }]#
h *T XML }]4 P Di/(#k d MDX5
/rlw XML Md {X5}]#
#
9 *cNa9)#
XQuery i/DiI ?V
Z XQuery P,mo=G i/Dw*9(i#mo=ITxP6W,C4iIi/Dw
e#i/9ITZKw e0f_PrT#
i /w e
w#
O xID ` v XQuery mo=9I#
Z 62 3 D< 4 5wK dMi/ Da9#ZK>}P,rT|,=vyw :;v Gf>
y w,|8(*C4&mi/D XQuery o( D f>;m
8(*CZ ^0:*X{FM`M {D {FUd URI #i/ we|,;vCZ 9l
price_list *XDmo=#price_list *X DZ]G+ product *X4[q 5rEP
qCD Pm#
© Copyright IBM Corp. 2006, 2009 61
|,CZ (ei/a{Dmo=# K mo=II 9CKc{r X|Vi
rT
| ,;5PCZ ( e i/&m73Dy
;vG1 !{FUdyw,|
<
4. XQuery
PDd Mi/Da9
9C XQuery / }lw DB2 }]
Z XQuery P,i/ITwCBP/}.;4q! DB2 } ]bPD d k XML } ]:
db2-fn:sqlquery M db2-fn:xmlcolumn#
db2-fn:xmlcolumn /}+lw{v XML P,x db2-fn:sqlquery +lwyZ SQL +
i /D XML 5#
db2-fn:xmlcolumn
db2-fn:xmlcolumn /}IC;vV{.DVTd?, CZj6;vmrS<PD
XML P,"5XC PPD XML 5r
{ .DVT d?XkG`M* XML D^(P{#K/}Jmzi!{v XML
}]Px;&CQw u~#
Z TB>}P,i/9C db2-fn:xmlcolumn / } 4q! BUSINESS.ORDERS m
D PURCHASE_ORDER PP D yPI:) % #;s,i/+TKd k }]4
PYw,Sb )I:)%D ;uX7P i!GP# i/a{G ; 6)%D yP
GPDPm#
db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city
P#K/}DTd?GxVs!4D#V
62 pureXML 8O
db2-fn:sqlquery
db2-fn:sqlquery /}IC;vm>+i/DV{.T d?,"5X;vI+i/
5XD XML 5"CxI D XML rP#+i/X k8( %Pa{/,xR P
D }]`MX k * XML#(}8(+i/,+J m z 9 C SQL D &\4r
XQuery a) XML }]#C/ }'
Z TB>}P,BUSINESS.ORDERS m P |,{* PURCHASE_ORDER D
XML P#ZC>}P,i/ 9C db2-fn:sqlquery /}4wC SQL,Tq!;
u UZ* 2005 j 6 B 15 U DyPI:) % # ;s,i/+TKd k }]4
PYw,Sb )I:)%D ;uX7P i
6 )%D yPGPDPm#
V9CN }r SQL od+]5#
!GP#i/a{ GZ 6 B 15 U;
db2-fn:sqlquery("
SELECT purchase_order FROM business.orders
WHERE ship_date = '2005-06-15' ")/shipping_address/city
* c:I db2-fn:sqlquery r db2-fn:xmlcolumn /}5 X D XML rPIT |,N N
XML 5(|(-S 5MZc)#b)/}";a\ G5Xq =<CDD 5r P#}g,
b )/}I\;5X%v-S 5 (}g ,36)w* XML } ]` M D5}#
T Z{FGqx V s!4 ,SQL M
db2-fn:xmlcolumn /}1 ,z&*@b)np#
SQL G;V;xVs!4 DoT
1 !ivB,SQL odP9 C DyPU(j6{aT/*;*s4#rK,SQL
mMPD{F(#ICs4{F,}g ,0f>}PD BUSINESS.ORDERS M
PURCHASE_ORDER#Z SQL
g ,business.orders M purchase_order ),Z&m SQL od1b){FaT/
*;*s4#(Z SQL P ,9IT(}+{FC+ }E }p44(F*
DxVs!4 D{F)#
6
XQuery G;VxVs!4 DoT
XQuery ;a+ !4{F *;*s4 {F#bVnpaZ, 19C XQuery M
SQL 1<Bl}#+ ]x db2-fn:sqlquery DV{.;bM* SQL i/ "I
SQL b vw xP bv ,b a + yP {F <* ;* s4 #r K, Z db2fn:sqlquery >
H ITs4N = 2 I T!4N =vV#+ G ,db2-fn:xmlcolumn DYw } ;G
SQL i/# Yw }GxVs !4D" CZm>P{D XQuery V{.D V#r
* 5 J P{ G BUSINESS.ORDERS.PURCHASE_ORDER,yTZ db2-
fn:xmlcolumn DYw}PXkCs 4 8(K{F#
9C SQL i/ XML }]ri
XQuery P;,D<(# 1 9 C db2-fn:sqlquery M
odP,IT9 C!4 {F4} Cb)P(}
(gj
}P,m{ business.orders T0P { purchase_order M ship_date
I T9C SQL +i/r XMLQUERY M XMLTABLE D SQL/XML i // } 4i/
XML }]#9ITZkT XML }]D SQL i/P9C XMLEXISTS =J#
v9C SQL (; 9CNN XQuery )i/ XML }] 1,;\(}"v+i/ZP6p
xPi/#*K,;\Si/5X{v XML D5;v9C
SQL ;I\5XD5,N#
* Z XML D5Zi/,h * 9C XQuery#IT 9 CBPNN SQL/XML / } r=J
(} SQL wC XQuery :
XMLQUERY
5X XQuery mo=Da{w* XML rPD SQL j?/}#
XMLTABLE
5X XQuery mo=Da{w* mD SQL m/}#
XMLEXISTS
7( XQuery mo=G q5X GUrP
D SQL =J#
Z 5 B i/ XML }] 63
XQuery k SQL DHO
DB2 'V+q=<CD XML }]f" ZmPP,T0 9 C SQL M / r XQuery 4S
}]bPlw XML }]#'V+b= VoTCww*i /oT,"Rb=VoT<_
Pw Cd{ oTD&\#
XQuery
1 SwC XQuery D i/TX|V XQUERY *7#K X |V 8 >}Z
XQuery,rK DB2 ~qwXk9CJCZ XQuery oT Rx Vs!4 Dfr#
m s & mGy]C 4 & m XQuery m o =DSZ4 x P D #(f XQuery m s
1aa) SQLCODE M SQLSTATE ,k(f SQL msD= =`,#&m
XQuery mo=1 ;a5 X/f# XQuery (}wC S DB2 mMS<Pi
XML }]D/ }4q!}]#2IS SQL i/PwC XQuery#Z Ki vB,
SQL i/I(}s(d?D==+ XML }]+]x XQuery# XQuery 'V
C4&m XML }]M9lB XML Ts(}g,*XMtT)DwVmo=#
CZ XQuery D`LSZya) D&\k SQL
Mlwi/a{#
SQL SQL \;(eM5}/ XML }]`MD5#| ,q=< CD XML D 5DV
{ .Ibv* XML 5,( I !)kT XML #=xP i $,Zm P ekr|
B#r_,I9C SQL 9l/ }49l XML 5 ;ZK}LP
}]*;* XML 5# 9a)K;)/ },9CI 9C XQuery 4i/ XML
}]T0+ XML }]*;*X5mTCZ SQL i/#}KI+ XML 5r
P /*V{.}]Tb, 9 ITZ SQL }]`Mk XML }]`M.dx P
*;#
9C
!
D&\`F,ICZ <8i/
a+d{X5
SQL/XML a)KB P/}
XMLQUERY
XMLQUERY G;vj?/},|+ XQuery mo =w* Td?,5X
D G;v XML rP# C / } P;)I!N } ,IC4+ SQL 5w*
XQuery d?+]x XQuery mo=#ITZ SQL i/DOBDPx
;=&mI XMLQUERY 5XD XML 5#
XMLTABLE
XMLTABLE
z I SQL m, SQL ITx ;=&mC SQL m#
XMLEXISTS
XMLEXISTS G;v SQL =J,|7( XQuery mo =Gq5XI;
vr` vniIDrP(x;G; vUrP)#
HOCZi/ XML }]D=(
r *I T (}9C XQuery"SQL r XQuery M SQL DiO4 C m`=( i/ XML
}],yT* !qD=( fiv;,xd/#BPwZh vTX (i/=( P{Du
~#
v XQuery
M=J,Tc S SQL 4wC XQuery:
G ;vm/ } ,| 9 C XQuery mo = 4S XML } ]
64 pureXML 8O
ZBPiv B,JO; 9C XQuery xPi/ :
v &C LrvCJ XML }],x; h*i/G XML X5}]
v +H0C XQuery `4Di/ (F= DB2 }]b Linux ®f"UNIX ®fM Win-
v 5X+Cw5Di/ a{T 9l XML D5
v k SQL `H,i/"pK|l $ XQuery
dows
®
f
wC SQL D XQuery
Z BPiv B (O;ZP7(D v 9C XQuery Div}b ),JO 9 Cw C SQL D
XQuery xPi/:
v i/f0 XML }]MX5 } ];ITZ i /P{CTX5P (eD SQL =JMw
}
v *+ XQuery mo=&CZ BPw n D a {:
– UDF wC,r*;\1S(}
– 9C SQL/XML "</}(}X 5 }]9lD XML 5
– 9C DB2 Net Search Extender Di/,a) XML D5D + D>Qw + Xkk
SQL dO9C
XQuery wCb) UDF
v SQL
v9C SQL(; 9CNN XQuery)lw XML }] 1,;\Z XML P6p xPi
/#*K,;\ Si /5X{v XML D5#KC (ZBPiv BJC:
v h*lw{v XML D5
v ;h*y]f" D5Z D5x P i/,r_ i/D=JZm Dd{G XML P
P
4P XQuery mo=D SQL/XML /}
SQL/XML /} XMLQUERY M XMLTABLE T0 XMLEXISTS =J9 XQuery m
o=\;Z SQL OBDP4 P# ZBPiv B, JOZ SQL Z4P XQuery:
v h*tCV P SQL &C L rTZ XML D5Zi/# *Z XML D5Zi/, h*
4P XQuery mo=,bI(} 9C SQL/XML 4jI
v i/ XML }]D&C Lrh *
s(A XMLQUERY r XMLTABLE PD XQuery d?#)
v k XQuery `H,i/"pK|l $ SQL
v h*Z%Ni/P5XX5}]M XML }]
v h*,S XML MX5}]
v h*Vir[/ XML } ]#I T+Si/D GROUP BY r ORDER BY S
CZ XML }](}g , 9 C XMLTABLE /}Tmq = lw M U/ XML }].
s)
8( XML {FUd
Z XML D5P,XML {FUdG I ! D ,Cw XML D 5PZ c { D 0:#*C J
9C{FUdD XML D 5P DZ c,XQuery mo =Xk, 18(,;{FUdw*
Zc{ D;?V#ITD58 (1! XML {FUd,"R ITD5P DX (*X8(
XML {FUd#
+ N}jG+]A XQuery m o = #(N}jG W H
d&
Z 5 B i/ XML }] 65
"b,{FUdywCVE(;)ax#bb6E,g{9k9C|,V E D SQL od
M XQuery mo=,G4; \ 9CV Ew*odU9V{(}g ,(}9C db2 -t w
C |nP&mw)#9I9C -td !n8(VETbDU9 V{,bIT7#;
ams
X b M |, { FU dy w D od # LL P D >} 9 C &/ t (~ )w *U9 V {
(-td~ ),+2## 9C % (-td% )#
} g,pureXML DLL9CT XML D58(K 1 !*X{FUdD XML D 5 #T
B XML GLLP 9 CDdP;v XML D5:
<customerinfo xmlns="http://posample.org" Cid="1002">
<name>Jim Noodle</name>
<addr country="Canada">
<street>25 EastCreek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>
XML D 5DyZc + D 5D 1!*X{FU ds(A(CJ 4 j 6 ( URI )http://
posample.org#
<customerinfo xmlns="http://posample.org" Cid="1002">
(}|( declare default element namespace rT,zZLLP K PD XQuery m
o=9a + URI w*1 !*X{FUds(#}g,TB SELECT odPD XQuery
m o=yw1 !*X{FUd;g{TL L P 4 (D CUSTOMER m KP SELECT o
d,G4a5 XM 'j6 :
SELECT cid FROM customer
WHERE XMLEXISTS('declare default element namespace "http://posample.org";
$i/customerinfo/addr/city[ . = "Markham"]' passing INFO as "i")
(}Z XML D5P9C ,; URI w*1!*X{FUd,Cmo = I 9 C} 7 D{
FUd0:Zmo=P^(Zc{#g{;P 1!*X{FUdyw,r_+m; URI
s (*1!*X{FUd,G 4 mo = ;a 9 C} 7 D{FUd^ (
Zc{,"R ;
a 5 X NN}]#}g,TB SELECT od`FZO; o d,+|;P1!{FUdy
w#g{TLLP4 (D CUSTOMER mKPKod,G 4;a5 XNN}]#
SELECT cid FROM customer
WHERE XMLEXISTS('$i/customerinfo/addr/city[ . = "Markham"]'
passing INFO as "i")
+{FUd0:k Zc{dO9C
* 9C{FUd^(Zc { ,IT ? vZc { mS { FUd0:# 9 C0Et*0:
kZc{#T ZZc po:addr,{FUd0: po k>XZ c{ addr t*#g{9 C
Zc{4^({FUd0:,G4Xk7#C0:s(A URI #}g,TB
d PD XQuery mo=(}yw{ FUd po +{ F Ud0: po s( A URI http://
posample.org#TLLP4 (D CUSTOMER mKPTBod1,a5 X ;v a{ #
SELECT cid FROM customer
WHERE XMLEXISTS('
declare namespace po = "http://posample.org";
$i/po:customerinfo/po:addr/po:city[ . = "Markham"]' passing INFO as "i")
{ FUd0: po I \GNN0:;X*DGs(A0:D URI #}g,TB SELECT
o dPD XQuery mo=9 C {FUd0: mytest,+` 1 Z O; o dPDmo=:
SELECT o
66 pureXML 8O
SELECT cid FROM customer
WHERE XMLEXISTS('declare namespace mytest = "http://posample.org";
$i/mytest:customerinfo/mytest:addr/mytest:city[ . = "Markham"]'
passing INFO as "i")
9C(d{w*{FUd0 :
I Z XQuery mo=P 9 C(d{4% d XML } ]P 9 CDNN{F U d#TB
SELECT odPD XQuery mo=9C(d{4% dy P{FUd0:#
SELECT cid FROM customer
WHERE XMLEXISTS('$i/*:customerinfo/*:addr/*:city[ . = "Markham"]'
passing INFO as "i")
TLLP4 (D CUSTOMER mKP SELECT od1,a5 X;vM 'j 6#
>}:|D*XD{FUd0:
b )>}5wKgNmS M } % ** X D QName 8( D {FUds(#
*XD QName GI!{F Ud0:MV?{# {FUd0:kV?{C 0Et*#g
{ {FUd0:fZ,G 4 as(A URI((CJ4j6 ),"R a a ) URI DrL
N=#
(}9Cng fn:QName"fn:local-name M fn:namespace-uri H/ } ,ITX|{ t T
MZc{T0iRk ZcD {FUd0:`X*D URI#
)9 QName | ({FUd URI MV? {#
XQuery {FUdy wTVE(;)a2 ,+;\9C VEw*odDU9 V {#b)>
}9C&/t(
~)w*U9 V{ ,k pureXML LLP9CD U9V{`,#
T*XmS{FU d0:
b )>} 9 CmPD;v XML D 5 #BP o d+4 (Km" + XML D5ekKm
P:
CREATE TABLE XMLTEST (ID BIGINT NOT NULL PRIMARY KEY, XMLDOC XML ) ~
INSERT INTO XMLTEST Values (4,
'<depts>
<dept id="A07">
<emp id="31201" >
<location region="31" />
</emp>
<emp type="new" id = "23322" >
<moved:location xmlns:moved="http://oldcompany.com" region="43" />
</emp>
</dept>
</depts> ') ~
T B SELECT odPD XQuery mo=+ r *XmS{FU d 0:#XQuery mo=
9C fn:QName 44(;v_ P{FUds(D QName#
XQuery let Sd+4 (;v{F* emp "R { FUd* http://example.com/new D
U*X# Z transform mo=P,rename mo=+|D XPath mo= $newdept/depts/
dept/emp[@type="new"] yj6D* XD{F#
d0:#
SELECT XMLQUERY ( '
let $newemp := fn:QName( "http://mycompany.com", "new:emp")
return
K *XD{F* emp , + G;P { FU
Z 5 B i/ XML }] 67
transform
copy $newdept := $doc
modify
do rename $newdept/depts/dept/emp[@type="new"] as $newemp
return
$newdept ' passing XMLDOC as "doc" )
from XMLTEST where ID=4~
XQuery mo=+5XTB XML }]T08(* new:emp Z cD;?VD{FUds
(#-}^DDD5G;vP' XML ,||,Qs(A{FUdD{FUd0:#Q+
{FUdy wmSAQ X |{DB*X#
<depts>
<dept id="A07">
<emp id="31201">
<location region="31" />
</emp>
<new:emp xmlns:new="http://mycompany.com" type="new" id="23322">
<moved:location xmlns:moved="http://oldcompany.com" region="43" />
</new:emp>
</dept>
</depts>
S*XP}%{ FUd0:
I T(}+ZcX |{*;_P{FUds(D QName ,45VSZ c {P}%{FU
d0:#SELECT odPDTB XQuery mo=9 C;v for SdM fn:namespace-uri
/ } 47 ( ? v emp Z c P * X Z cD URI # g { URI * http://
oldcompany.com,G4 rename mo=+ 9C fn:QName M fn:local-name /}S*X
}%{ FUd0:#
ZcP
SELECT XMLQUERY ( '
transform
copy $newdept := $x
modify
for $testemp in $newdept/depts/dept/*:emp/*
return
if ( fn:namespace-uri( $testemp ) eq "http://oldcompany.com")
then
do rename $testemp as fn:QName( "", fn:local-name($testemp) )
else()
return
$newdept
' passing XMLDOC as "x" )
from XMLTEST where ID=4~
68 pureXML 8O
XQuery mo=+5XTB XML }]#Zc{ new:location ;f;* location #4
SZcP}%{ FUds(#
<depts>
<dept id="A07">
<emp id="31201">
<location region="31" />
</emp>
<emp type="new" id="23322">
<location xmlns:moved="http://oldcompany.com" region="43" />
</emp>
</dept>
</depts>
XMLQUERY /}E v
XMLQUERY G;v SQL j?/},|JmzZ SQL OBDP4P XQuery mo=#
I T+d?+]AZ XMLQUERY P8 ( D XQuery m o =#XMLQUERY 5X XML
5,|G XML rP#K rPIT* U ,2I T|, ;nr` n#
(}Z SQL OBDP4P XQuery mo=,IT j IBPNq:
v Tf"
XML D5Zi/;v SQL 1Z{vD56pi/)
v 9 XML }]\;Nk SQL i/
v ,1TX5 }]M XML }]xPYw
v +x ;=D SQL &m&CZ 5X D XML 5(}g ,9CSi/D ORDER BY S
a{ xPE r)
dT
P X|`j8 E",kND P XHOi/=( DD 5 #
k"b,XQuery xVs!4 ,r K8(Z XMLQUERY P8(D XQuery m o=M
d?1 Xk!D #
;h*+] SQL m o=Dj{&\ 1,9a)KCZ +]P{x ;XZ passing S
dPT= 8 ( {FD O r
XMLTABLE xPr%P{+ ] #
D?V XML D 5x;G {v XML D 5xPYw(;P XQuery ITZ
%o(# k N D9 C XMLEXISTS "XMLQUERY M
XMLQUERY 5XD GUrP
g{dP8 (D XQuery mo=zzGUrP,G4 XMLQUERY /}5X GUrP#
} g,g {BP= v XML D5f" Z CUSTOMER mD XML P INFO P:
<customerinfo Cid="1002">
<name>Jim Noodle</name>
<addr country="Canada">
<street>25 EastCreek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>
<customerinfo Cid="1003">
<name>Robert Shoemaker</name>
<addr country="Canada">
<street>1596 Baseline</street>
<city>Aurora</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N8X 7F8</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
<phone type="home">416-555-2937</phone>
<phone type="cell">905-555-8743</phone>
<phone type="cottage">613-555-3278</phone>
</customerinfo>
g{"vTBi/:
SELECT XMLQUERY ('$d/customerinfo/phone' passing INFO as "d")
FROM CUSTOMER
Z 5 B i/ XML }] 69
G 4zIDm+|,gB=P(QTC m xPq= ` ET c |Se ~ w K):
m7.a{m
<phone type=″ work″ >905-555-7258</phone>
<phone type=″ work″ >905-555-7258</phone><phone type=″ home″ >416-555-2937</phone><phone
type=″ cell″ >905-555-8743</phone><phone type=″ cottage″ >613-555-3278</phone>
k "b,Z ;P|, ;v <phone> *XDrP,x Z ~P|, D v <phone> *XDr
P#zIKa{Gr*Z~v XML D5|,Dv <phone> * X,"R XMLQUERY
5 Xzc XQuery mo=DyP* X D rP#(k"b ,Z~PP D a{G a 9; 1D
D 5#k7#SUK
a{DNN&C Lr<\} 7&m KP*#)
O;v>}5wK(# 9C XMLQUERY D= =: ;N&CZ ;v XML D5,dP
zIDmD?Pm>;vD5zzDa{#+G,9IT+ XMLQUERY ,1&CZ `
vD5,Mq`vD5|,Z%vrPP;y#ZK
>}P,+ XMLQUERY &CZ r
PPDyPD 5zz Da{5XZ;P P#
} g,Y(OfT>DGvD 5 f" Z CUSTOMER m D INFO PP#T B i/PD
db2-fn:xmlcolumn /}5X;vZ INFO PP|, =v XML D5D rP#
VALUES
(XMLQUERY
('db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo/phone'))
;s,+ XMLQUERY &CZ XML D5D b;vrP ,zIDm+;| ,;P, g
By>:
m8.a{m
<phone type=″ work″ >905-555-7258</phone><phone type=″ work″ >905-555-7258</phone><phone
type=″ home″ >416-555-2937</phone><phone type=″ cell″ >905-555-8743</phone><phone
type=″ cottage″ >613-555-3278</phone>
INFO PP XML D5P DyP <phone> *X<5X Z;PP, r* XMLQUERY
T %v5xPYw:S db2-fn:xmlcolumn 5X D XML D 5D rP#
XMLQUERY 5XDUrP
g{dP8 (D XQuery mo=5XUrP,G4 XMLQUERY /}5XUrP#
} g,ZTBi/P,TZ CUSTOMER mD INFO P P ;|, 5 *“Aurora” D <city>
*XD?;P,XMLQUERY +5XU rP#
SELECT Cid, XMLQUERY ('$d//addr[city="Aurora"]' passing INFO as "d") AS ADDRESS
FROM CUSTOMER
Y( CUSTOMER mP}P,+;P;v XML D5|, 5*“Aurora” D <city> *X#
O ;v SELECT od+z z Bm(QTCdvxP q = ` ET c |Se~wK)#
m9.a{m
CID ADDRESS
1001
1002
70 pureXML 8O
m9.a{m (x
CID ADDRESS
1003 <addr country=″ Canada″ ><street>1596 Baseline</street><city>Aurora</
)
city><prov-state>Ontario</prov-state><pcode-zip>N8X-7F8</pcode-zip></
addr>
k "bGgNT;|,5*“Aurora”D <city> *XDP5X$H*cDQrP/ XML ,
x;GU5D UrP#+ G,+ZZ}PP5X <addr> *X ,r*|zc XQuery m
o=#ZZ}PP,+5X;v GU rP #
(}ZodD WHERE S dx;G SELECT S dP &C=
J(g XMLEXISTS), I
T \b5X|,UrPDP#}g,IT4gBy>`4O;vi/,+ XMLQUERY
/}PD}K=JF/ = WHERE Sd:
SELECT Cid, XMLQUERY ('$d/customerinfo/addr' passing c.INFO as "d")
FROM Customer as c
WHERE XMLEXISTS ('$d//addr[city="Aurora"]' passing c.INFO as "d")
(}Ki/zIDmgBy>:
m
10.
a{m
CID ADDRESS
1003 <addr country=″ Canada″ ><street>1596 Baseline</street><city>Aurora</
city><prov-state>Ontario</prov-state><pcode-zip>N8X-7F8</pcode-zip></
addr>
XMLQUERY (#CZ SELECT SdPT5Xy!D 5D,N#Z XMLQUERY D
XQuery mo=P8 (D=J;}Ka{/PDP,|GvCZ 7(5XD,N#*f}
} %a{/PDP,h *Z WHERE Sd P &C =J#XMLEXISTS = JIC4 &C
@5Zf" D XML D 5Z D5 D=J#
+ XMLQUERY a{D}]`M*;*G XML `M
g {k*+ XMLQUERY /}D a { 5XA SQL OBDTxPx;=&m(gxPH
OrE r Yw ),G4 h * + 5X D XML 5* ; *f ]D SQL `M# 8 (
XMLCAST +9z\ ;Z XML 5MG XML 5. dxP*;#
":
1. v1Z XMLQUERY P8(D XQuery mo=5XDrP|,;v
Qr"Dn1,
E \+ XMLQUERY D a {*;* SQL }]`M#
2. ZG UTF-8 }]bP,+ XMLQUERY Da{*;* SQL }]`Ma<Bzk
3 *;,- r G5XD5aSZ? UTF-8 `k* ;*}]bzk3#5X5Z;Z
}]bzk3PDyP zkc+f;*
f ;V{#}k f ;V{ a <B XML kG
XML 5.dDHOvVbbP*,yT&"b7# Qf"D XML }]v|, }]
b zk3Z|(D z kc#
Z 5 B i/ XML }] 71
>}:HOi/PD XML 5MG XML 5
Z TBi/P,+ XMLQUERY 5XDrPSd XML `M*;* V { ` M , T cI
T+|k PRODUCT mD NAME PH O#(g{S XMLQUERY 5XD XML 5;
GrP/DV{.,G4 XMLCAST Y w+ '\#)
SELECT R.Pid
FROM PURCHASEORDER P, PRODUCT R
WHERE R.NAME =
XMLCAST( XMLQUERY ('for $pname in $d/PurchaseOrder/item/name
>}:4 XMLQUERY a{ xPE r
ZTBi/P,4z7hvD <name> *X D5Er D3r5Xz7j6,Cz7hv
w * XML D 5f" #r * SQL ;\T XML 5xPE r ,yTX k + rP * ;*
SQL ITdxPE rD5(ZK>} P,*V{ )#
SELECT Pid
FROM PRODUCT
ORDER BY XMLCAST(XMLQUERY ('$d/product/description/name'
}]`M.dD? F*;
return $pname'
PASSING P.PORDER AS "d") AS VARCHAR(128))
PASSING DESCRIPTION AS "d") AS VARCHAR(128))
Z m`ivB, h *+_Px(} ] ` M D5
?F` M*;
*m;V}]`M,r_
* ;*$H"+ H r !};;,D ,;} ]` M #}]` M a}G;v > },+;V
}]`Ma}*m;V }]`M 1h*+5? F*;* BD }]`M#I?F*;*
m ;V}]`MD ;V}]`MIS
4 }]`M
?F`M*;
*?j}]`M#
I T+ ;V}]`M ~ =rT = X?F*;*m ;V}]`M#y ] f0=D } ]`
M,IT9C?F`M*;/}"CAST f6r XMLCAST f64T=|D }]`M#
m b,14( K C'(eD P 4/}1 ,Xk\;+ 4 /}D
N }D } ]`M?F*
;*}Z4(D/} D }]`M#
Z 74 3 Dm 11 PT>KZC}]`M .d\'VD? F`M*;#Z;Pm>?F`
M *;Y w }D} ]` M (4}]` M ),x% ?D}]` M m>?F` M *;Y w
D?j}
] `M#“Y” m>IT+ CAST f6CZ 4 } ] `MM?j} ] `MDiO#
5 wK;\9C XMLCAST f6D G )iv#
g {+ N N}]`M?F*;* V {r< N } ]`M 1 N NGUWV { ;XO,Ma
5X/f#KXOP*k TV {r<N}
] `M351NNGUWV { ;XOx "z
msDiv;,#
f 0=% 5`MDBP?F`M*;G\ 'VD(}GmPyw,qr<9C CAST f
64xP?F `M*;):
v S%5`M DT ? F*;*| D4}]`M S
v S%5`M DT D4}
]`M S ?F*;*% 5 `M DT
v S%5`M DT ? F*;*,; %5`M DT
v S}]`M A ?F*;*% 5 `M DT ;dP ,I+ A a}*%5 `M DT D4 }
]`M S
v S INTEGER ?F*;*; V 4}]`M* SMALLINT D% 5`M DT
72 pureXML 8O
v S DOUBLE ?F*;*; V4}]`M* REAL D% 5`M DT
v S DECFLOAT ?F*;*4}]`M * DEFLOAT D% 5`M DT
v S VARCHAR ?F*;*; V4}]`M* CHAR D% 5`M DT
v S VARGRAPHIC ?F*;*; V4}]`M* GRAPHIC D% 5`M DT
v TZ Unicode }]b,S VARCHAR r VARGRAPHIC ?F*
;*;V4}]`
M * CHAR r GRAPHIC D% 5` M DT
v 9C XMLCAST f6S;V_ P4 }]`M S D% 5 `M DT ?F*;* XML
v y] XML 5D XML #=} ]`M,9C XMLCAST f6S XML ?F*;*
_PI*NNZC} ]`MD4} ]`MD% 5 `M DT
;\+ FOR BIT DATA V{`
M?F*;* CLOB#
T Zf0=+}i`M w *?j D ?F`M*;,X k \;+4}i D *X D }]`
M?F*;*?j}i}]D*XD}]`M(SQLSTATE 42846 )#g{?j}i`M
G ;vU( } i,G44 } i5Xk G ;vU(}i(
SQLSTATE 42821),"R4}
i 5Dy}Xk! ZrHZ?j}i}]`MDnsy}(SQLSTATE 2202F )#g{?
j}i`M G;v*O }i,G4 Xk\;+4}i5Dw} D }]` M?F*;*
? j}i`MDw} D } ]`M#; \ +C'(eD}i`M
5? F*;*C '(e
D m;V,{ D }i`M(SQLSTATE 42846 )#
;\+Nj`Mw* CAST f6D4}] ` Mr?j}]`M,}G+N}jG?F*
;*Nj`M#
T Zf0=+P` M w*?j D ?F`M*;,4 P 5 mo= DH 6 Xk k ?
jP`
M DH 6`%d,"RX k \;+4 P 5mo= P D?vVN? F *;*`&D?j
VN #;\ +C' (eD P ` M5 ? F * ; *C ' (e D m ; V ,{ D P` M
(SQLSTATE 42846 )#
^ (+a 9/`M5? F * ; * d{`M5#;h*+a 9
/`M ST ?F* ;*|D
d P;V ,`M,bGr* ST D,`MDyP=( <JCZ ST #g{Z{DYw;J
CZ ST DS`M,G49C S`M& mmo= 4+ ST 1w| D;VS`M 4& m#
1 49C# = {4T?F ` M*;Pf0 =D C
SQL
76
4 iR| (CC'(eD}] ` MD_PC{F DZ ;V#=#
'(eD}]`MS T^ (1,9C
f 0=}C`M D BP?F`M*;G\ 'V D :
v S}C`M RT ?F*;*|Dm>} ] `M S
v S}C`M RT Dm>} ] `M S ?F*;* }C`M RT
v S?j`M* T D
}C`M RT ?F*;*?j `M* S D }C`M RS,dP S
G T D,`M#
v S}]`M A ?F*;*}C ` M RT,dP ,I+ A a}*}C ` M RT Dm >
}]`M S#
1 49C# = {4T?F ` M*;Pf0 =D N<}]`M D ?
76
9C SQL
4 iR| (CC'(eD}] ` MD_PC{F DZ ;V#=#
j `MST^(1,
Z 5 B i/ XML }] 73
m
11.
\'VDZ C}]`M.dD? F `M*;
?j}]`M
V
A
R
4}]`M
S
M
I
A
N
L
T
L
E
I
G
N
E
T
R
D
E
B
C
I
G
I
R
I
M
E
N
A
A
T
L
L
D
E
C
D
O
F
U
L
B
O
L
A
E
T
C
H
A
R
C
H
F
A
B
R
D
C
V
H
A
A
R
R
C
H
A
2
R
C
L
F
O
B
2
B
D
SMALLINT YYYYYYYYYYY -Y
I N T E G E R YYYYYYYYYYY -Y
B I G I N T YYYYYYYYYYY -Y
D E C I M A L YYYYYYYYYYY -Y
R E A L YYYYYYYYYYY -Y
D O U B L E YYYYYYYYYYY -Y
D E C F L O A T YYYYYYYYYYY -Y
C H A R YYYYYYYYYYYYY
CHAR FOR BIT
YYYYYYYYYYY - - - - YYYYY
V
A
R
G
G
R
R
A
A
P
P
H
H
I
I
C
C
1Y1
1Y1
1Y1
1Y1
1Y1
1Y1
1Y1
1Y1Y1
T
I
M
D
B
D
B
C
A
L
L
T
O
O
E
B
B
E
S
T
T
A
I
M
M
P
E
B
O
O
L
X
E
M
A
L
N
-----Y3-
-----Y3-
-----Y3-
-----Y3-
-----Y3-
-----Y3-
-------
YYYYY4-
3
-
DATA
V A R C H A R YYYYYYYYYYYYY
VARCHAR FOR BIT
YYYYYYYYYYY - - - - YYYYY
1Y1Y1
YYYYY4-
3
-
DATA
C L O B -------Y-Y-YY
GRAPHIC Y
VARGRAPHIC Y
1Y1Y1Y1Y1Y1Y1Y1
1Y1Y1Y1Y1Y1Y1Y1
DBCLOB -------Y
-Y1-Y1YYYYY1Y1Y1Y3-
-Y1-Y1YYYYY1Y1Y1Y3-
1
-Y1-Y1YYYY - - -Y3-
1Y1Y1
B L O B --------Y-Y----Y---Y
D A T E - YYY - - - YYYY -Y
T I M E - YYY - - - YYYY -Y
T I M E S T A M P - - YY - - - YYYY -Y
XML Y
5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5Y5
1Y1
1Y1
1Y1
Y- - -Y4-
4
--Y-YY3-
---Y-Y3-
--YYYY3-
Y-
-
B O O L E A N ---------------------
74 pureXML 8O
m
11.
\'VDZ C}]`M.dD? F `M*; (x
)
?j}]`M
V
4}]`M
A
R
S
M
I
A
N
L
T
L
E
I
G
N
E
T
R
D
E
B
C
I
G
I
R
I
M
E
N
A
A
T
L
L
D
E
C
D
O
F
U
L
B
O
L
A
E
T
C
H
A
R
C
H
F
A
B
2
R
D
C
V
H
A
A
R
R
C
H
A
R
C
L
F
O
B
2
B
D
V
A
R
G
G
R
A
P
H
I
C
D
R
B
A
B
C
P
L
L
H
O
O
I
B
B
C
5w
v PXf0= C'(eD`MM } C`MD\'V D?F `M*;D E",kNDCm 0fD hv#
v ^(+a 9/`M5? F* ; *d{NN`M5#
v LONG VARCHAR M LONG VARGRAPHIC }]`ML x \'V+
G;Fv 9C,"RZ+4D"PfPI\a
}%#
1
v 'VT Unicode }]b x P?F` M *;#
2
FOR BIT DATA
T
I
M
E
S
T
T
D
A
I
A
M
M
T
P
E
E
B
O
O
L
X
E
M
A
L
N
3
;\9C XMLCAST 4 4P? F`M*;#
4
~ =&m XMLPARSE / } , T cZT XML PD35(INSERT r UPDATE )*V{.1+ V {.*;* XML #
V{.XkGa9<CD XML D 5,35E\I &#
5
;\9C XMLCAST "Ry] XML 5 DW c XML #=} ]`M 4 4 P? F `M*;#PXj8 E ",kND
“XMLCAST”#
6
;\+Nj`Mw* CAST f6D4}] ` Mr ? j}]`M,}G+ N }jG?F*;*N j `M#
mm12 T>KZ?F*;*j 6D?j }]`M1&ZD oiRPXyJ CDfrD
E"#
m
12.
PX?F*;*3 V}]`MD fr
?j}]`M fr
SMALLINT SQL Reference, Volume 1 PD: SMALLINT j
?/};
INTEGER SQL Reference, Volume 1 PD: INTEGER j?
/};
BIGINT SQL Reference, Volume 1 PD: BIGINT j?/
};
DECIMAL SQL Reference, Volume 1PD: DECIMAL j?
/};
NUMERIC SQL Reference, Volume 1 PD: DECIMAL j?
/};
REAL SQL Reference, Volume 1 PD: REAL j?/
};
Z 5 B i/ XML }] 75
m
12.
PX?F*;*3 V}]`MD fr (x
?j}]`M fr
DOUBLE SQL Reference, Volume 1PD: DOUBLE j?
DECFLOAT SQL Reference, Volume 1PD: DECFLOAT j
CHAR SQL Reference, Volume 1 PD: CHAR j?/
VARCHAR SQL Reference, Volume 1 PD: VARCHAR j
CLOB SQL Reference, Volume 1 PD: CLOB j?/
GRAPHIC SQL Reference, Volume 1 PD:GRAPHIC j
VARGRAPHIC SQL Reference, Volume 1 PD: VARGRAPHIC
DBCLOB SQL Reference, Volume 1 PD: DBCLOB j?
BLOB SQL Reference, Volume 1 PD
DATE SQL Reference, Volume 1 PD: DATE j?/
TIME SQL Reference, Volume 1 PD: TIME j?/
TIMESTAMP g{4`M*V{.,kN D SQL Reference,
)
/};
? /};
};
? /};
};
? /};
j ?/};
/};
:BLOB j?/
};
};
};
Volume 1 PD:TIMESTAMP j?/} ;,d
P8( K ;v Yw } # g {4 }] ` M *
DATE,G41d A G I 8 ( DU Z M 1 d
00:00:00 iI#
76 pureXML 8O
+ G XML 5? F *;* XML 5
m
13.
\'VDSG
4}]`M
SMALLINT Y xs:short
INTEGER Y xs:int
BIGINT Y xs:long
DECIMAL r NUMERIC Y xs:decimal
REAL Y xs:float
DOUBLE Y xs:double
DECFLOAT N -
CHAR Y xs:string
VARCHAR Y xs:string
CLOB Y xs:string
XML
5? F*;*
XML
5
?j}]`M
XML q CD XML #=`M
m
13.
\'VDSG
4}]`M
GRAPHIC Y xs:string
VARGRAPHIC Y xs:string
DBCLOB Y xs:string
DATE Y xs:date
TIME Y xs:time
TIMESTAMP Y xs:dateTime
BLOB Y xs:base64Binary
V {`M FOR BIT DATA Y xs:base64Binary
%5`M +K<mk %5`M D4`MdO9C
5w
1
4 }]`M TIMESTAMP 'VD 1 dA G +H* 0 = 12 # xs:dateTime Dns! } k } +H
* 6#g{4}]`M TIMESTAMP D1dA G+H,}K 6,G45Z?F*;* xs:dateTime
1+;XO#
XML
5? F*;*
XML5(x)
?j}]`M
XML q CD XML #=`M
1
LONG VARCHAR M LONG VARGRAPHIC }]`ML x \'V+G;Fv 9C,"
R Z+4D"PfPI\a}%#
1+V{.5? F *;* XML 51, q CD xs:string -S5;\|,G( XML V
{ (SQLSTATE 0N002 )#g{d k V{.;GI C Unicode ,G4a+dkV{ * ;*
9C Unicode#
T SQL ~x
F `Mx P ? F `M*;1+ q C ` M* xs:base64Binary D XQuery -
S5#
+ XML 5? F*;*G XML 5
I TO*(} XMLCAST + XML 5*; * G XML 5b ;}L|,=v?F`M*
;:;vG XQuery ?F`M* ;,|+4 XML 5* ;*T&Z SQL ?j`MD
XQuery `M;SEGS`&D XQuery `M?F*;*f} D SQL `M#
g {?j`M_P`&D\'V D XQuery ?j
M*;*`&D XQuery ?j` MD XQuery ?F` M*;,G4 XMLCAST G\ '
V D#Z XQuery ?F`M*; P 9C D ?j`M@ 5 Z`&D XQuery ?j`M,"
RI\|,;)=S^F#
B mP> K (}bV*;qCD XQuery `M
m
14.
\'VDS
?j}]`M
SMALLINT Y xs:short
INTEGER Y xs:int
BIGINT Y xs:long
XML
5? F*;*G
XML
`M,"R_P\'VDCZ S45`
#
5
4}]`M
XML `&D XQuery ?j`M
Z 5 B i/ XML }] 77
m
14.
\'VDS
XML
5? F*;*G
XML5(x)
4}]`M
?j}]`M
XML `&D XQuery ?j`M
DECIMAL r NUMERIC Y xs:decimal
REAL Y xs:float
DOUBLE Y xs:double
DECFLOAT Y ;P%d`M
1
CHAR Y xs:string
VARCHAR Y xs:string
CLOB Y xs:string
GRAPHIC Y xs:string
VARGRAPHIC Y xs:string
DBCLOB Y xs:string
DATE Y xs:date
TIME(;x1x ) Y xs:time
TIMESTAMP(;x1x ) Y xs:dateTime
2
BLOB Y xs:base64Binary
CHAR FOR BIT DATA N ;I4P? F`M*;
VARCHAR FOR BIT DATA Y xs:base64Binary
% 5`M +K<mk % 5`M D 4`MdO9C
P"}C "a9/r is}]` M
N ;I4P? F `M*;
(ADT), r_d{
5w
1
DB2 'V XML #= 1.0,C #=;P* DECFLOAT a)%dD XML #=`M#4TB
= =&m XMLCAST D XQuery ?F ` M*;=h:
v g{45D`M* XML #=} V `M,G49CC }V `M#
v g{45D`M* XML #= `M xs:boolean,G49C xs:double#
v qr,9C xs:string "
2
xs:dateTime Dns!}k }+H* 6#4 }]` M TIMESTAMP 'VD1dA G+H* 0 =
4P=Sl iTR=P '}Vq =#
12 #g{?j}]`M TIMESTAMP D1dA G +H!Z 6,G45ZS xs:dateTime ?F*;
1+;XO#g{?j}]`M TIMESTAMP D1dA G+H,}K 6,G45ZS xs:dateTime
? F*;1
+T|nd 0#
Z BP ^ FivB,Iz ^ F XML #=} ]`MP 'XCw XQuery ?F`M * ; D
?j}]`M#
v **;* V {.`MD XML 5X k z c G) DB2 ` M D$H^F,; \ XONN
V{r VZ#IzD XML #=`M D{FGs4 D SQL `M{FS O
B ._ V{
MV{.D ns$H;}g ,g{ XMLCAST ?j}]`M G VARCHAR(20) ,G
4IzD XML #=`M D {FG VARCHAR_20#
v **;* DECIMAL 5D XML 5 Xkz c 8(D DECIMAL 5 D+H,"R!}
c s f D G c ;} ; \ ,} ! } ; } # I z D XML # = `M D { F
G
DECIMAL_ precision _ scale,dP precision G?j SQL }]`MD + H,x scale
78 pureXML 8O
G ?j SQL } ]`MD!};;}g ,g{ XMLCAST ?j}]`M* DECIMAL
(9,2),G4IzD XML #=`MD{F* DECIMAL_9_2#
v **;* TIME 5D XML 5;\Z!}csf| ,_PGc ;}Dk?V#Iz
D XML #=`M D{F* TIME#
g{ XML 5;zc NNb)
^F,G4IzD XML #=`M{+;vVZ {" P#
K `M{IozC'Kbms{" ,+G;T&ZQ(e DNN XQuery `M#g{d
k5;{OIzD XML #=`M(`& D XQuery ?j`M) Dy>`M,G4ms
{"I\a8>C`M#IZKI
z XML #=`M{Dq=+4I\a |D,rK;
&+| Cw`LSZ#
Z XQuery ?F`M*;&m XML 5. 0,+}%rPPD N ND5Z c ,x;}%
DD 5Z cD?v1SSz +I* CrPP D;n#g{D 5Z c_P`v1SSz
G 4^D.sD r PH-<rP_P|`n#;PNND5ZcD XML 5Ma
Zc,
(}9C XQuery fn:data / } ;-S/,"+ q CD -S/rP5CZ XQuery ? F
` M*;#g{- S /D r P5G;vU r P,G4?F ` M*;+5 X U5,"R
;a 4PN N
x ; =&m #g{ -S/ D r P5P P ` vn , G4 a 5 X m s
(SQLSTATE 10507 )#
g {CZ XMLCAST D?j`MG SQL }]`M DATE "TIME r TIMESTAMP ,
G4 XQuery ?F`M*;zzD XML 52a;w{* UTC,"Ra}%C5D1
x?V#
1 `& D XQuery ?j`M5 ;*;*
SQL ?j`M1,~xF XML }]`M( }
g,xs:base64Binary r xs:hexBinary )MaSV{q= * ;*5JD~xF } ]#
g{((}9C XMLCAST)+ INF"-INF r NaN b) xs:double r xs:float 5?
F *;* SQL }]`M DOUBLE r REAL 5 ,G4a5 X ms (SQLSTATE
22003)#xs:double r xs:float 5 -0 +;*;* +0
#
g {4Yw} ;GC'(eD% 5`M,G4 ? j ` MI T G C'(eD% 5`M#
ZKivB,+9C XMLCAST f6 + 45? F*;*C '(eD% 5`M(4 ,?
j `M)D4`M,;s,+9C CAST f6+K5?F*;*C'(eD% 5`
ZG Unicode }]bP,S XML 5? F*;* G XML ?j`Mf0+zk3 S Z
? UTF-8 q=*;* } ]bzk3#g{ XML 5P DNNzk c ;vVZ}]bz
k3P,G4b V*;I\ a< B }kf;V{#
XMLQUERY
XMLQUERY ( xquery-expression-constant
PASSING xquery-argument
M#
,
BY REF
Z 5 B i/ XML }] 79
BY REF
RETURNING SEQUENCE
EMPTY ON EMPTY
)
xquery-argument:
(1)
xquery-variable-expression AS identifier
BY REF
":
1 mo=D } ]`M;\ G DECFLOAT #
#=* SYSIBM#; \+/}{8(*^ ( {#
XMLQUERY /}5X;v XML 5,C 5 GI\ 9 C8(dkTd?w* XQuery d
?T XQuery mo=xPs5D a{#
xquery-expression-constant
8(;v SQL V{.#?,9C \'VD XQuery oT o(I+
dbM* XQuery
mo=#Zbv* XQuery od.0,C#?V{ .;*;* UTF-8# XQuery m
o=9 C;iI!Ddk XML 54 P,"5X, y w* XMLQUERY m o=D
5 5XDdvrP#xquery-expression-constant D 5 ;\GUV{.r U WV{.
(SQLSTATE 10505 )#
PASSING
8(dk 5T0b) 5+] A
xquery-expression-constant y8(D XQuery mo=
D==#1 !ivB,(} 9CP{w*d ?{,+ wC/}1 yZw CrP D?
v (;P{ ~ =+]A XQuery m o = #g{8(D xquery-argument P D identi-
fier kP{w Cr`%d,G4a+T= xquery-argument +]A XQuery m o =,
Sx2GC ~=P#
BY REF
(1!+]zF) } ]`M* XML D N N xquery-variable-expression M 5
8
X D5}C#1(}}C+] XML 51,XQuery s 5 + 1 S S 8(Ddkm
o=P 9C dkZc w(g{P ),b+#tyP tT,| (- <Zcj 6M
D 53r#g{=vN}+ ] `, D XML 5
,"RZcj6 H OMD53r
HOf0b=vdkN }. d|,D3) Zc,G4b =V HOI\}C`,
XML ZcwP D Zc#
KSd;0lG XML 5D +]==# G XML 5Z? F*;* XML Zd+
4(5DB1>#
xquery-argument
8(++] A xquery-expression-constant
y 8(D XQuery mo= D N}# N
}8(5M+]C 5D= =#CN }|(+x Ps5D SQL mo =#
v g{zI5D`MG XML ,G4|+d I input-xml-value #U XML 5+*
;* XML UrP#
v g{zI5D`M;G XML ,G4|X k I?F*;* XML }]`
5+*;* XML UrP# *;sD 5+dI input-xml-value#
M#U
80 pureXML 8O
T xquery-expression-constant xPs51, + * XQuery d?a);vHZ
input-xml-value D5MI AS Sd 8( D{F#
xquery-variable-expression
8(;v SQL mo=,d 5Z 4PZdI) xquery-expression-constant y
8(D XQuery mo=9 C#C mo=;\|,rP}C(SQLSTATE
428F9)r OLAP /}( SQLSTATE 42903)#Cmo=D }]`M;\ G
DECFLOAT#
AS identifier
8 ( xquery-variable-expression yzID 5 +w* XQuery d?+] A
xquery-expression-constant#Cd?{+* identifier# XQuery oTPDd?
{ 0 f D0 < @ *{E($);|( Z identifier P#j6 X kGP ' D
XQuery d?{,"R^Z XML NCName (SQLSTATE 42634)#j6D
$H;\ ,} 128 vVZ#,; PASSING SdPD= v
N} ;\9C`
,Dj6(SQLSTATE 42711 )#
BY REF
8>+(}}C+] XML dk 5#1(}}C+ ] XML 51,XQuery
s 5+ 1 SS 8 (Ddkmo = P 9C d kZc w (g{P ),b+#t
yPtT,|(- <Zcj6MD 53r#g{=vN}+]`
,D XML
5 ,"RZcj6 H O MD53rH O f0b=vdk N } .d|,D3
)Z c,G4b=VH OI\}C`, XML ZcwP D Zc#g{Z
xquery-variable-expression sf48( BY REF,G4+9C PASSING X
|VsfDo(ya)D1!+]zF+] XML N}
# ;\TG XML 5
8(K!n# +]G XML 51,C 5+*;* XML ;K}L a4 (1
>#
RETURNING SEQUENCE
8> XMLQUERY mo =5X;vrP#
BY REF
8 >(}}C5X XQuery mo = Da{#g { K 5 |,Zc,G49C XQuery
mo=D5X5 DNN mo=+1 SS UZc
} C,b+#ty P ZctT,|(
-<Zcj6MD53r#}CDZ c ZdZcwZ#V`,#g{48( BY REF
S d,+8(K PASSING ,G4+9C1 !+]zF#g{H4 8 ( BY REF 2
48( PASSING,G41!+]z F * BY REF#
EMPTY ON EMPTY
8(&m XQuery
m o=yzzDUrP+w* U rP5X#
a{D}]`M* XML;|;\ *U#
g {T XQuery mo=xPs5 1 zz m s,G4 XMLQUERY /}+5X XQuery
ms(SQLSTATE 6p “10” )#
":
1. XMLQUERY C(^F: XMLQUERY /};\ G:
v k JOIN Kc{`X*D ON Sdr MERGE
odD;?V(SQLSTATE
42972)
v CREATE INDEX EXTENSION odPD GENERATE KEY USING r RANGE
THROUGH SdD;?V( SQLSTATE 428E3)
Z 5 B i/ XML }] 81
v CREATE FUNCTION(b?j? )odPD FILTER USING S d r CREATE
INDEX EXTENSION odPD FILTER USING SdD;?V( SQLSTATE
428E4)
v li<xrPzImo =D; ?V(SQLSTATE 42621 )
v group-by SdD;?V( SQLSTATE 42822)
v P/}Td ?D;?V(SQLSTATE 42607 )
2. w* S i/D XMLQUERY:d1Si/ D XMLQUERY mo=I\ \ ^F
Dod^F#
XMLTABLE /}E v
XMLTABLE G;v SQL m/},|S XQuery mo=Ds5a{ P 5X m #XQuery
mo=(#5X5w*rP,+G,XMLTABLE Jmz4 P XQuery mo ="5X5
w*m#5XD mIT|,N N SQL }]`M( |( XML)DP#
Si/
k XMLQUERY /};y,I T +d?+]AZ XMLTABLE P8
=#XQuery mo =Da{CZ zzz IDmP DP5#zIDm Da9I XMLTABLE
D COLUMNS Sd(e#ZK S dP,(} 8 (P{"} ] `MMzIP5 D ==4
(ePDXw#9 a) KCZ +] P{ x;XT=8 ({FDOr %o(#kN
97 3D:9C XMLEXISTS"XMLQUERY r XMLTABLE +]D r%P{;#
I T(}Z XMLTABLE D PATH SdP8( XQuery mo=4zzz I D mP D P
5#g{;P* PATH Sd 8( XQuery mo=,G4+P {Cw XQuery mo=4
z IP5,"RZ z IP51,H0Z XMLTABLE P8 (D XQuery mo= D a
+I*b?OB Dn#TZz IP5D PATH Sd D XQuery mo=5XUr PDi
v ,9 I T8( I !1!Sd4*Pa) 1 !5#
g{zIDmP DP`M;G XML, "R(e P5 D XQuery mo= Da {;GUr
P ,G4~=9 C XMLCAST 4+ XML 5*
XMLTABLE /}Jmz! q Gqyw{FUd#g{ 9C XMLNAMESPACES yw
8 ({FUd,G 4 b) { FUds(JCZ XMLTABLE / } wCP D yP XQuery
m o=#g{; 9 C XMLNAMESPACES yw4 y w{ FUds(,G4 s (v J C
ZP XQuery mo=,bq-
{FUdy w#
;*?j}]`MD5#
(D XQuery mo
DZ
{
XMLTABLE Ec
5Xm(x;GrP )9C\;Z SQL i/OBDP4 P`FT B DYw :
v Z SQL +i/P|z XQuery mo=Da{
82 pureXML 8O
} g,ZTBi/P ,SQL + i/|z(}Z XMLTABLE P4 P XQuery m o =
“db2-fn:xmlcolumn(″ CUSTOMER.INFO″ )/customerinfo”yzIDm#
SELECT X.*
FROM XMLTABLE ('db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
COLUMNS "CUSTNAME" CHAR(30) PATH 'name',
"PHONENUM" XML PATH 'phone')
as X
v +f" D XML D 5P D5ek =mP(kNDPX ek 5 D XMLTABLE >})
v T XML D5P D5xPE r
}g,ZTBi/P ,4f" Z CUSTOMER mD INFO PPD XML D5Z DM
'{Ta{ xPE r#
SELECT X.*
FROM XMLTABLE ('db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
as X
ORDER BY X.CUSTNAME
COLUMNS "CUSTNAME" CHAR(30) PATH 'name',
"PHONENUM" XML PATH 'phone')
v +;) XML 5f" *X5}]," + ;) XML 5f" * XML (kNDPX e k
5D XMLTABLE >})
X *Bn:g{Z XMLTABLE D PATH !nP8(D XQuery mo=5X:
v `vniIDrP,r P D }]`MX k * XML #g{}Z+S XMLTABLE 5X
D5ek = XML PP,G4
7 #e k D5Gq = <CD XML D 5 #PX&m5X
` vnDrP D >},kNDPX e k5 D XMLTABLE >}#
v UrP,rTC P55X U5#
>}:ek XMLTABLE P5XD 5
XMLTABLE SQL m/}ICZSf"D XML D 5 Plw 5 ,;s+lw=D5ek
=mP#
K =( Gr%N = DVb, V b G + XML D5,N f" ZX5mPPD } L#(fx
"MD XML # =Vb&\a )D G|UiD;VVb`M# hzx"MD XML # =
Vb,I
T ,1+`v XML D5V b I`vm#)
}g,g{BP= v XML D5f" Z{ * CUSTOMER DmP:
<customerinfo Cid="1001">
<name>Kathy Smith</name>
<addr country="Canada">
<street>25 EastCreek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>
<customerinfo Cid="1003">
<name>Robert Shoemaker</name>
<addr country="Canada">
<street>1596 Baseline</street>
<city>Aurora</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N8X 7F8</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
<phone type="home">416-555-2937</phone>
<phone type="cell">905-555-8743</phone>
<phone type="cottage">613-555-3278</phone>
</customerinfo>
"Rzk*+b)D5P D5 ek=4 gB(eDmP:
CREATE TABLE CUSTPHONE (custname char(30), numbers XML)
; s , 9 C XMLTABLE D T B INSERT o d C XML D 5P D 5 nd
CUSTPHONE:
Z 5 B i/ XML }] 83
INSERT INTO CUSTPHONE
SELECT X.*
FROM XMLTABLE ('db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
COLUMNS
"CUSTNAME" CHAR(30) PATH 'name',
"PHONENUM" XML PATH 'document{<allphones>{phone}</allphones>}'
)asX
k "b,XQuery Zc9l/}“document{<allphones>{phone}</allphones>}”G Z
XMLTABLE P PHONENUM PD76mo=P8 (D#h*D59l/},r*ek
= XML P(ZK>}P* NUMBERS P )P D 5XkGq = <C D XML D 5 #Z
K>}P,<customerinfo> D5 P Cid= ″1003 ″ DyP <phone> * X5XZ;v|, D
vnDr
{<phone type="work">905-555-7258</phone>,<phone type="home">416-555-2937</phone>,
<phone type="cell">905-555-8743</phone>, <phone type="cottage">613-555-3278</phone>}
PP:
K rP>mGa9;1D XML D5,r K ;\ e k= XML P NUMBERS P#* 7
#I&ek phone 5,+rPDyPn 9l I;vq =<CDD 5#
a {mgBy>(QTC d v x Pq=`ET c | Se~wK):
m
15.
a{m
CUSTNAME NUMBER
Kathy Smith <allphones>
<phone type=″ work″ >905-555-7258</phone>
</allphones>
Robert Shoemaker <allphones>
<phone type=″ work″ >905-555-7258</phone>
<phone type=″ home″ >416-555-2937</phone>
<phone type=″ cell″ >905-555-8743</phone>
<phone type=″ cottage″ >613-555-3278</phone>
</allphones>
> }: 9 C XMLTABLE T3nD?v 5 }5X;P
84 pureXML 8O
g { XML D5|,3v*X D `v5},"Rzk*TK*XD?v5}zI;P,
G4IT9C XMLTABLE 4o= K'{#
}g,g{BP= v XML D5f" Z{ * CUSTOMER DmP:
<customerinfo Cid="1001">
<name>Kathy Smith</name>
<addr country="Canada">
<street>25 EastCreek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>
<customerinfo Cid="1003">
<name>Robert Shoemaker</name>
<addr country="Canada">
<street>1596 Baseline</street>
<city>Aurora</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N8X 7F8</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
<phone type="home">416-555-2937</phone>
<phone type="cell">905-555-8743</phone>
<phone type="cottage">613-555-3278</phone>
</customerinfo>
* 4( ;vm , d P ? v <phone> 5<f" Z % @ P P ,I T 4 g By>9 C
XMLTABLE:
SELECT X.*
FROM CUSTOMER C, XMLTABLE ('$cust/customerinfo/phone' PASSING C.INFO as "cust"
COLUMNS "CUSTNAME" CHAR(30) PATH '../name',
"PHONETYPE" CHAR(30) PATH '@type',
"PHONENUM" CHAR(15) PATH '.'
)asX
Ki/T=v XML D5 zzTBa{:
m
16.
a{m
CUSTNAME PHONETYPE PHONENUM
Kathy Smith work 905-555-7258
Robert Shoemaker work 905-555-7258
Robert Shoemaker home 416-555-2937
Robert Shoemaker cell 905-555-8743
Robert Shoemaker cottage 613-555-3278
k "b{F*“Robert Shoemaker”D XML D 5P D ? v <phone> *XGgN Z %@
PP5XD#
TZ`,D5,z2I Ti! <phone> *Xw * XML,g By>:
SELECT X.*
FROM CUSTOMER C, XMLTABLE ('$cust/customerinfo/phone' PASSING C.INFO as "cust"
COLUMNS "CUSTNAME" CHAR(30) PATH '../name',
"PHONETYPE" CHAR(30) PATH '@type',
"PHONENUM" XML PATH '.'
)asX
K i/T=v XML D5 z zTBa{( Q TCdvxP q =`E T c|Se~w
K):
m
17.
a{m
CUSTNAME PHONETYPE PHONENUM
Kathy Smith work <phone type=″ work″ >416-555-1358</phone>
Robert Shoemaker work <phone type=″ work″ >905-555-7258</phone>
Robert Shoemaker home <phone ″ type=″ work″ >416-555-2937</phone>
Robert Shoemaker cell <phone type=″ work″ >905-555-8743</phone>
Robert Shoemaker cottage <phone type=″ work″ >613-555-3278</phone>
>}: 9C XMLTABLE &m XML D5P`v wy|,D* X
Z|,`vcNa9rwD XML D 5P,;v wPD*XI\km;vwPD*X.
d fZX5#IT9C XPath m o =4 & m XML D5P D `X*X#
Z 5 B i/ XML }] 85
T B>}+y] XML D5P D E "4zIPX+ h 8MR_a(ABs C Dm#K
XML D5P|,kBsC PwnyZ ;C`XDE "#
T Bod+4 ( CZ f"K XML D5D MOVE m:
CREATE TABLE MOVE (ID BIGINT NOT NULL PRIMARY KEY, MOVEINFO XML )
TB XML }]|,PXwv +>5PDwn0d;CDE"#XML E "VI=vw#
;vwP|,PX wnDE ",}g ,nytD?E" nDjGE T0TnDhv#
m ;vwP|,PX a (YwDE",}g , ? E a (=D B; C "*l
+R8(D
% c"+2 xrT0f" x #
TBoda+K XML D5ek MOVE mP:
INSERT into MOVE (ID, MOVEINFO) values ( 1, '
<listing>
<items>
<item dept="acct" tag="12223">
<name>laser printer</name>
<area>common</area>
</item>
<item dept="recptn" tag="23665">
<name>monitor, CRT</name>
<area>storage</area>
</item>
<item dept="acct" tag="42345">
<name>CPU, desktop</name>
<area>office</area>
</item>
<item dept="recptn" tag="33301">
<name>monitor, LCD</name>
<area>office</area>
</item>
<item dept="mfg" tag="10002">
<name>cabinet, 3 dwr</name>
<area>office</area>
</item>
<item dept="acct" tag="65436">
<name>table, round 1m</name>
<area>storage</area>
</item>
</items>
86 pureXML 8O
<locations>
<building dept="recptn" >
<wing>main</wing>
<floor area="storage">1</floor>
<floor area="common">1</floor>
<floor area="office">2</floor>
</building>
<building dept="mfg" >
<wing>east</wing>
<floor area="storage">1</floor>
<floor area="common">2</floor>
<floor area="office">2</floor>
</building>
<building dept="acct" >
<wing>west</wing>
<floor area="storage">2</floor>
<floor area="common">1</floor>
<floor area="office">2</floor>
</building>
</locations>
</listing>
')
T B SELECT od+ n ?E"k;CE"iO=;p,"4(m4P>n?E""?E
E"M B;C#
3 dDX|G9 C `T XPath a $x/../../ 9 n ?E "k ;CE"%d#
SELECT T.*
from MOVE,
XMLTABLE( '$doc/listing/items/item' PASSING MOVE.MOVEINFO AS "doc"
COLUMNS
ITEM_ID VARCHAR(10) PATH 'let $x := . return $x/@tag' ,
DESC VARCHAR(20) PATH 'let $x := . return $x/name' ,
DEPT VARCHAR(15) PATH 'let $x := . return $x/@dept' ,
WING VARCHAR(10) PATH 'let $x := . return $x/../../locations/
FLOOR VARCHAR(10) PATH 'let $x := . return $x/../../locations/
)as T
building[@dept = $x/@dept]/wing',
building/floor[@area = $x/area
and ../@dept = $x/@dept ]'
Ty>}]KPKo d 1,+5XTB }]:
ITEM_ID DESC DEPT WING FLOOR
---------- -------------------- --------------- ---------- ---------12223 printer, laser acct west 1
23665 monitor, CRT recptn main 1
42345 CPU, desktop acct west 2
33301 monitor, LCD recptn main 2
10002 cabinet, 3 dwr mfg east 2
65436 table, round 1m acct west 2
>}: 9C XMLTABLE &mVc }]
XML D5PIT|,}]DcNa9,xKcNa9|,D6W6p}Id#IT9C
XPath mo=4 &mVc}]#
TB>}+4 (I ;(FczD? ~ T0?v? ~D8i ~iIDPm#E"yZ ;
v XML D5,K D5P|,Fcz D
TBod+4 ( CZf"K XML D5D BOMLIST m:
CREATE TABLE BOMLIST (Cid BIGINT NOT NULL PRIMARY KEY, ITEMS XML )
XML D5|,i~ M Si~DPm#i ~ Pm kCZhvi~D Si ~DcNa9`
X#g {;vi~I` vSi ~iI,G4? vSi ~+P>*Ki ~D ;vS*
X#
TBoda+K XML D5ek BOMLIST mP:
CREATE TABLE BOMLIST (Cid BIGINT NOT NULL PRIMARY KEY, ITEMS XML )
insert into BOMLIST (Cid, ITEMS) values ( 1, '
<item desc="computersystem" model="L1234123">
<part desc="computer" partnum="5423452345">
<part desc="motherboard" partnum="5423452345">
<part desc="CPU" partnum="6109486697">
<part desc="register" partnum="6109486697"/>
</part>
<part desc="memory" partnum="545454232">
<part desc="transistor" partnum="6109486697"/>
i ~T 0 i ~.d DX5#
Z 5 B i/ XML }] 87
</part>
</part>
<part desc="diskdrive" partnum="6345634563456">
<part desc="spindlemotor" partnum="191986123"/>
</part>
<part desc="powersupply" partnum="098765343">
<part desc="powercord" partnum="191986123"/>
</part>
</part>
<part desc="monitor" partnum="898234234">
<part desc="cathoderaytube" partnum="191986123"/>
</part>
<part desc="keyboard" partnum="191986123">
<part desc="keycaps" partnum="191986123"/>
</part>
<part desc="mouse" partnum="98798734">
<part desc="mouseball" partnum="98798734"/>
</part>
</item>
')
TB SELECT od/@D5"4(m TP>?~M8 ?~#
;nX *&\G9 C XMLTABLE /}4(m B#Z XPath a $doc//part P 9 C //
4/ @“n ”ZcP DyP?~* X#
SELECT
A.ITEMNAME,
B.PART,
B.PARENT
FROM BOMLIST ,
XMLTABLE('$doc/item' PASSING BOMLIST.ITEMS AS "doc"
COLUMNS
ITEMNAME VARCHAR(20) PATH './@desc',
ITEM XML PATH '.'
)AS A,
XMLTABLE('$doc//part' PASSING A.ITEM AS "doc"
COLUMNS
PART VARCHAR(20) PATH './@desc',
PARENT VARCHAR(20) PATH '../@desc'
)AS B
88 pureXML 8O
T}]KPTBo d 1,+T >Bm"P >?~M8 ?~:
ITEMNAME PART PARENT
-------------------- -------------------- -------------------computersystem computer computersystem
computersystem motherboard computer
computersystem CPU motherboard
computersystem register CPU
computersystem memory motherboard
computersystem transistor memory
computersystem diskdrive computer
computersystem spindlemotor diskdrive
computersystem powersupply computer
computersystem powercord powersupply
computersystem monitor computersystem
computersystem cathoderaytube monitor
computersystem keyboard computersystem
computersystem keycaps keyboard
computersystem mouse computersystem
computersystem mouseball mouse
XMLTABLE
XMLTABLE (
row-xquery-expression-constant
PASSING row-xquery-argument
COLUMNS xml-table-regular-column-definition )
xmlnamespaces-declaration ,
BY REF
,
xml-table-ordinality-column-definition
,
(1)
row-xquery-argument:
(2)
xquery-variable-expression
AS identifier
BY REF
xml-table-regular-column-definition:
column-name data-type
BY REF default-clause
PATH column-xquery-expression-constant
xml-table-ordinality-column-definition:
column-name FOR ORDINALITY
":
1 ;\`N8 ( xml-table-ordinality-column-definition Sd( SQLSTATE 42614)#
2 mo=D }]`M;\ G DECFLOAT#
#=* SYSIBM#; \+/}{8(*^ ( {#
XMLTABLE /}5X;va{m,Ca{mGI\9C8(dkTd?w* XQuery d
? T XQuery mo=xPs5D a {#P XQuery m o=Da{
rPPD?v rPn<
m >a{ m PD;P#
xmlnamespaces-declaration
8 (;vr ` v XML {FUdy w ,b)y w +I* row-xquery-expression-
constant M column-xquery-expression-constant D2,OBD D;?V#g{ XQuery
m o=G XMLTABLE DN},G4bV m o=D2,Q*{FUd/ I$H("
D2,Q*{FUd/ MK
S dP8 (D{FUdy w i I#XQuery mo=PD
XQuery rTIT2G b ){FUd#
Z 5 B i/ XML }] 89
g {48( xmlnamespaces-declaration ,G4 ;P$H("D2,Q*{FUd/ J
CZ XQuery mo=#
row-xquery-expression-constant
8(;v SQL V{.#?,9C \'VD XQuery oT o(I+d bM* XQuery
m o=#C#?V{ .+1 S *;* UTF-8,x; * ;*}]b r Z z k3#
XQuery mo =9C;iI
RZCrPPT? vrPnzI;P#row-xquery-expression-constant D5;\GU
V{.rUW V{.(SQLSTATE 10505 )#
PASSING
8 (dk 5 T0b) 5 +] A row-xquery-expression-constant y 8 (D XQuery m
o=D= =#1 !ivB,(} 9CP{w*d ?{,
D?v(;P {~=+ ]A XQuery mo=#g{ 8( D row-xquery-argument P
D identifier kP{w Cr`%d,G4a+ T= row-xquery-argument + ]A
XQuery mo=, Sx2GC ~=P#
BY REF
8 (1!ivB(}}C+] N N XML d k N}#1(}}C+ ] XML 5
1,XQuery
+ #tyPtT,|(- < Z cj6MD 5 3r#g{=vN}+ ] `, D
XML 5,"RZcj6HOMD53rHOf0b=vdkN}.d|,D3
)Zc,G4b
s5+ 1SS8(Ddkmo=P 9CdkZc w(g{P ),b
!Ddk XML 54 P,"5X;vdv XQuery rP,
+wC/}1 yZw CrP
= VHOI\}C`, XML Z cw P DZc #
KSd;0lG XML 5D +]==# G XML 5Z? F*;* XML Zd+
4(5DB1>#
row-xquery-argument
8 (++]A row-xquery-expression-constant y 8 (D XQuery mo= D N}#
N}8(5M+]C 5D= =#C N}|(Z+a {+]A XQuery
0xP s5D SQL mo=#
v g{zI5D`MG XML ,G4|+d I input-xml-value #U XML 5+*
;* XML UrP#
v g{zI5D`M;G XML ,G4|X k I?F*;* XML }]`M#U
5+*;* XML UrP# *;sD 5+dI input-xml-value#
T row-xquery-expression-constant x
Z input-xml-value D5M I AS Sd8(D{F#
xquery-variable-expression
8 (;v SQL mo=,d 5 Z 4 PZdI) row-xquery-expression-
constant y8(D XQuery mo =9C#Cmo=;\|, NEXT VALUE
mo="PREVIOUS VALUE mo=(SQLSTATE 428F9 )r OLAP / }
(SQLSTATE 42903 )#Cmo=D }]`M;\ G
AS identifier
8 ( xquery-variable-expression yzID 5 +w* XQuery d?+]A row-
xquery-expression-constant#Cd?{+* identifier# XQuery oTPDd?
{ 0 f D0 < @ *{E($);|( Z identifier P#j6 X kGP ' D
XQuery d?{,"R^Z XML NCName#j6D$H;\ ,} 128 v
V Z#,; PASSING SdPD=v
42711)#
P s51,+* XQuery d?a);vH
DECFLOAT#
N } ;\9C`,Dj6(SQLSTATE
mo=.
90 pureXML 8O