Nhp môn H qun tr c s d liu DB2
189
XMLQUERY Thc thi câu truy vn XQuery và tr v dãy kt qu
XMLTABLE Thc thi câu truy vn XQuery và kt qu tr v (nu có) s, là
mt bng quan h
XMLCAST Ép kiu XML
Bng 16.5 - Các hàm SQL/XML
Nhng ví d minh h&a sau s dng c s d liu “mydb” mà ta ã to ra t* trc.
Ví d 1:
Gi s bn cn xác nh tên tt c khách hàng sng mt vùng nào ó (có cùng mã
vùng – zip). Bng “clients” lu a ch- khách hàng, bao g+m mã vùng, trong mt ct
XML. S dng XMLEXISTS, bn tìm thy ct d liu XML phù hp vi mã vùng, sau ó
gii hn li kt qu tr v.
SELECT name FROM clients
WHERE xmlexists (
‘$c/Client/Address[zip=”95116”]’
passing clients.contact as “c”
)
Dòng u tiên ca câu lnh SQL nói rng bn mun ly thông tin trong ct “name” ca
bng “clients”.
Mnh WHERE g&i hàm XMLEXISTS, ch- nh rõ biu thc XPath yêu cu DB2 tìm
phn t “zip” có giá tr 95116.
Mnh “$c/Client/Address” xác nh ng d%n bên trong cây cu trúc ca tài
liu XML DB2 có th tìm ra phn t “zip”. Ký t $ c dùng khai báo “c” là mt
bin. Bin “c” này sau ó c nh ngh'a bng câu lnh passing clients.contact as “c”.
Trong ó “clients” là tên bng và “contact” là tên ct có kiu d liu XML. Nói cách khác,
chúng ta ang a tài liu XML vào bin “c”.
DB2 kim tra d liu XML trong ct “contact”, duyt t* nút “Client” xung nút “Address”,
cui cùng là nút “zip” và xác nh xem khách hàng có sng vùng có mã vùng ó
không. Nu thy, hàm XMLEXISTS tr v “true” và DB2 ly ra tên khách hàng tng
ng.
Ví d 2:
Chúng ta suy ngh' xem làm cách nào to ra c m%u báo cáo g+m danh sách a ch-
th in t ca nhng khách hàng “Vàng” (có trng thái “Gold”). Câu truy vn di ây
có th gii quyt vn này:
SELECT xmlquery(‘$c/Client/email’ passing contact as “c”)
FROM clients
WHERE status = “Gold”
Dòng u tiên nói rng ta mun ly ra phn t là a ch- th in t ca tài liu XML ch
không mun ly ra ct d liu. Tng t ví d trc, tài liu XML c lu trong bin
“$c”. Trong ví d này, hàm XMLQUERY có th c s dng sau mnh SELECT,
trong khi hàm XMLEXISTS c s dng sau mnh WHERE.
Ví d 3:
Có trng hp bn mun trình bày d liu XML theo dng bng, ta có th làm c
iu này bng cách s dng hàm XMLTABLE.
Nhp môn H qun tr c s d liu DB2
190
SELECT t.comment#, i.itemname, t.customerID, Message
FROM items I,
xmltable(‘$c/Comments/Comment’ passing i.comments as “c”
columns Comment# integer path ‘CommentID’,
CustomerID integer path ‘CustomerID’,
Message varchar(100) path ‘Message’) AS t
Dòng u tiên cho bit nhng ct nào s, xut hin trong t#p hp kt qu (results set).
Nhng ct bt u bng “t” là c s trên các giá tr ca phn t XML.
Dòng tip theo g&i hàm XMLTABLE xác nh rõ ct XML ca DB2 s, cha d liu mà
ta cn (“i.comments”) và ng d%n n phn t ó trong tài liu XML, là nhng phn t
mong mun.
T* dòng 4 n 6 là mnh “columns”, xác nh nhng phn t XML c th nào s,
c ánh x tng ng vi nhng ct trong bng kt qu ca câu lnh SQL dòng 1.
Phn ánh x này có s tham gia ca kiu d liu mà các giá tr ca các phn t XML s,
chuyn i thành. Trong ví d này, tt c d liu XML u c i thành kiu d liu
vn có ca SQL.
Ví d 4:
Bây gi ta s, thc hin mt ví d n gin có s dng biu thc XQuery FLWOR bên
trong hàm XMLQUERY SQL/XML.
SELECT name, xmlquery(
‘for $e in $c/Client/email[1] return $e’
passing contact as “c”
)
FROM clients
WHERE status = ‘Gold’
Dòng th nht xác nh rng bng kt qu ca câu truy vn bao g+m tên khách hàng và
kt qu tr v t* hàm XMLQUERY. Dòng th hai cho bit phn t “email” u tiên ca
phn t “Client” s, c tr v. Dòng th ba ch- ngu+n d liu XML (ct “contact”).
Dòng th t cho ta bit ct này bng “client”; và dòng nm ch- ra khách hàng “vàng” là
quan tâm ca chúng ta.
Ví d 5:
Ví d này minh h&a li hàm XMLQUERY có s dng biu thc XQuery FLWOR, nhng
ln này ta không ch- tr v d liu XML mà còn c HTML.
SELECT xmlquery (‘for $e in $c/Client/email[1]/text()
return <p>{$e}</p>’
passing contact as “c”
)
FROM clients
WHERE status = ‘Gold’
Mnh return ca XQuery cho phép bin i d liu XML u ra theo yêu cu. S
dng hàm text() dòng u tiên ch- ra rng ta ch- quan tâm n biu di0n vn bn
a ch- e-mail u tiên ca nhóm khách th"a mãn yêu cu. Dòng th hai cho bit thông
tin này s, c b&c li trong các th2 HTML (trong trng hp này là th2 <p> và </p>).
Ví d 6:
Ví d di ây minh h&a cách s dng hàm XMLELEMENT to ra mt dãy các phn
Nhp môn H qun tr c s d liu DB2
191
t, mi phn t này li cha trong nó các phn t con (sub-element) có ni dung v ID,
tên hàng hóa và ch- s hàng hóa ti thiu trong kho (SKU) tng ng vi các ct trong
bng “items”. V c bn, ta có th dùng hàm XMLELEMENT khi mun chuyn t* d liu
quan h sang d liu XML.
SELECT
xmlelement (name “item”, itemname),
xmlelement (name “id”, id),
xmlelement (name “brand”, brandname),
xmlelement (name “sku”, sku)
FROM items
WHERE srp < 100
Kt qu xut ra ca câu truy vn trên nh sau:
<item>
<id>4272</id>
<brand>Classy</brand>
<sku>981140</sku>
</item>
…
<item>
<id>1193</id>
<brand>Natural</brand>
<sku>557813</sku>
</item>
Truy vn d liu XML vi XQuery
Trong phn trc, ta ã thy c cách truy vn d liu XML vi câu SQL có phn m
rng cho XML. Trng hp này, SQL là phng pháp truy vn chính, và XPath c
nhúng vào bên trong câu lnh SQL. Còn trong tip theo này, ta nói v cách s dng
XQuery truy vn d liu XML. Lúc này, XQuery là phng pháp chính, và trong mt
s trng hp, ta s, nhúng SQL vào bên trong XQuery (bng cách s dng hàm “db2-
fn:sqlquery”). Khi thc hành vi XQuery , ta s, g&i vài hàm, s dng c biu thc
FLWOR.
Ví d 1:
Làm mt truy vn XQuery n gin là ly d liu liên lc ca khách hàng.
xquery db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)
Nh luôn luôn thêm lnh “xquery” vào u biu thc XQuery cho DB2 bit rng nó
cn s dng b phân tích (parser) XQuery. Nu không, DB2 s, cho rng bn ang c
gng thc thi biu thc SQL. Hàm db2-fn:xmlcolumn ly ct ta ch- nh trong tài liu
XML làm tham s. Câu lnh trên tng ng vi câu lnh SQL sau ây:
SELECT contact FROM clients
Ví d 2:
Ta s dng biu thc FLWOR ly thông tin v s fax ca khách hàng.
xquery
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
return $y
Nhp môn H qun tr c s d liu DB2
192
Dòng u tiên g&i b phân tích XQuery. Dòng th hai yêu cu DB2 lp ht các phn t
con fax trong ct CLIENTS.CONTACT. Mi phn t fax c lu trong bin $y. Dòng
cui cùng nói rng giá tr ca bin $y s, c tr v trong mi ln lp.
Kt qu xut ra ca câu truy vn trông ging nh sau (mc nh có th g+m a ch- ca
không gian tên (namespace) nhng ây tôi không th hin ra, mt khác thông tin xut
có th tri ra thành nhiu dòng nên hi khó &c):
<fax>4081112222</fax>
<fax>5559998888</fax>
Ví d 3:
Ví d này tip tc truy vn d liu XML và tr v kt qu là HTML
xquery
<ul> {
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/Address
order by $y/zip
return <li>{$y}</li>
</ul>
Kt qu HTML tr v trông nh sau:
<ul>
<li>
<address>
<street>9407 Los Gatos Blvd.</street>
<city>Los Gatos</city>
<state>ca</state>
<zip>95302</zip>
</address>
</li>
<li>
<address>
<street>4209 El Camino Real</street>
<city>Mountain View</city>
<state>CA</state>
<zip>95302</zip>
</address>
</li>
…
</ul>
Ví d 4:
Tip theo là cách nhúng SQL vào trong XQuery bng vic s dng hàm db2-
fn:sqlquery. Hàm db2-fn:sqlquery thc thi câu truy vn SQL và ch- tr v nhng
d liu XML c ch&n. Ch- nhng câu truy vn SQL tr v d liu XML mi c
truyn vào hàm db2-fn:sqlquery.
xquery
for $y in
db2-fn:sqlquery(
‘select comments from items where srp > 100’
)/Comments/Comment
where $y/ResponseRequested = ‘Yes’
Nhp môn H qun tr c s d liu DB2
193
return (
<action>
{$y/ProductID
$y/CustomerID
$y/Message}
</action>
)
Trong ví d trên, câu truy vn SQL l&c nhng dòng d liu th"a iu kin giá tr ti ct
“srp” phi ln hn 100. T* các dòng ã l&c này ly ra ct “comments”, là ct d liu
XML. Câu lnh XQuery (hoc XPath) tip theo c áp dng cho nhng phn t con.
16.3.6 Ni (join) vi SQL/XML
Phn này s, mô t cách thc thc hin lnh JOIN gia hai ct XML ca hai bng khác
nhau, hoc gia mt ct XML và mt ct quan h. Gi s ta ã to hai bng vi các
lnh sau:
CREATE TABLE dept (unitID CHAR (8), deptdoc XML)
CREATE TABLE unit (unitID CHAR(8) primary key not null,
name CHAR(20),
manager VARCHAR(20),
. . .
)
Ta có th thc hin lnh JOIN theo mt trong hai cách
Phng pháp 1:
SELECT u.unitID
FROM dept d, unit u
WHERE XMLEXITS(
‘$e//employee[name = $n]’
passing d.deptdoc as “e”, u.manager as “m”)
Trên dòng 3 ca lnh này ch- ra rng lnh JOIN xut hin gia phn t “name” là phn
t con ca ct XML deptdoc ca bng “dept”, và ct quan h “manager” ca bng
“unit”.
Phng pháp 2:
SELECT u.unitID
FROM dept d, unit u
WHERE u.manager = XMLCAST(
XMLQUERY(‘$e//employee/name’
passing d.deptdoc as “e”)
AS char(20))
Ghi chú:
DB2 không phân bit ch in hoa và ch thng và gi nh tt c tên bng v
à
tên ct u là ch in hoa, trong khi ó XQuery li phân bit ch in hoa và ch th
ng.
Các hàm trên là hàm giao din ca XQuery (XQuery interface function) do ó tên b
ng
và tên ct truyn vào các hàm này nên là ch hoa. Truyn tên i t
ng dng ch
thng có th gây ra li “tên i tng không xác nh” (undefined object name)
Nhp môn H qun tr c s d liu DB2
194
Trong la ch&n này, ct quan h thì bên trái ca lnh JOIN. Nu ct có quan h bên
trái du bng, mt ch- mc quan h có th c dùng thay cho mt ch- mc XML.
16.3.7 Ni (Join) vi XQuery
Gi s có các bng sau c to ra:
CREATE TABLE dept(unitID CHAR(8), deptdoc XML)
CREATE TABLE project(projectdoc XML)
Nu ta s dng SQL/XML, câu truy vn s, nh sau:
SELECT XMLQUERY (
‘$d/delp/employee’ passing d.deptdoc as “d”)
FROM dept d, project p
WHERE XMLEXISTS(
‘$e/dept[@deptID=$p/project/deptID]’
passing d.deptdoc as “e”, p.project as “p”)
Lnh tng ng s dng XQuery s, là:
xquery
for $dept in db2-fn:xmlcolumn(“DEPT.DEPTDOC”)/dept
for $proj in db2-
fn:xmlcolumn(“PROJECT.PROJECTDOC”)/project
where $dept/@deptID = $proj/deptID
return $dept/employee
Phng pháp th 2 này d0 phiên dch hn – bin “$dept” mang tài liu XML ca ct
XML “deptdoc” ca bng “dept”. Bin “$proj” mang tài liu XML ca ct XML “projectdoc”
ca bng “project”. Nh v#y dòng 4 thc hin lnh JOIN gia mt thuc tính ca tài liu
XML u tiên và mt phn t ca tài liu XML th hai.
16.3.8 Các lnh cp nht và xóa
Các lnh c#p nh#t và xóa d liu XML có th c thc hin bng mt trong hai cách:
- S dng câu lnh SQL UPDATE và DELETE
- G&i th tc DB2XMLFUNCTION.XMLUPDATE
Trong c hai trng hp, c#p nh#t hoc xóa tác ng mc tài liu; th#t v#y, toàn b
tài liu XML c thay th vi mt ln c#p nh#t. Ví d, nu trong ví d di ây ta mun
thay th phn t <state>, toàn b tài liu XML trên thc t b thay th.
UPDATE clients SET contact=(
xmlparse (documment
‘<Client>
<address>
<street>5401 Julio ave.</street>
<city>San Jose</city>
<state>CA</state>
<zip>95116</zip>
</address>
<phone>
<work>4084633000</work>
<home>4081111111</home>
<cell>4082222222</cell>
</phone>
Nhp môn H qun tr c s d liu DB2
195
</Client>’)
)
WHERE id = 3227
16.3.9 Ch, mc XML
Trong mt tài liu XML, các ch- mc có th c to ra theo các phn t, thuc tính
hoc giá tr (vn bn). Sau ây là mt s ví d, gi s bng sau ã c to:
CREATE TABLE customer(info XML)
Và gi s h+ s sau ã c lu trong bng này:
<customerinfo Cid=”1004”>
<name>Matt Foreman</name>
<addr country=”Canada”>
<street>1596 Baseline</street>
<city>Toronto</city>
<state>Ontario</state>
<zip>M3Z-5H9</zip>
</addr>
<phone type=”work”>905-555-4789</phone>
<phone type=”home”>416-555-3376</phone>
<assistant>
<name>Peter Smith</name>
<phone type=”home”>416-555-3426</phone>
</assistant>
</customerinfo>
1) Lnh này to mt ch- mc thên thuc tính “Cid”
CREATE UNIQUE INDEX idx1 ON customer(info)
GENERATE KEY USING
xmlpattern ‘/customerinfo/@Cid’
AS sql DOUBLE
2) Lnh này to mt ch- mc trên phn t “name”
CREATE UNIQUE INDEX idx2 ON customer(info)
GENERATE KEY USING
xmlpattern ‘/customerinfo/name’
AS sql VARCHAR(40)
3) Lnh này to mt ch- mc trên m&i phn t “name”
CREATE UNIQUE INDEX idx3 ON customer(info)
GENERATE KEY USING
xmlpattern ‘//name’
AS sql VARCHAR(40)
4) Lnh này to mt ch- mc trên toàn b vn bn (tt c các giá tr). /ây là lnh không
nên dùng, nó quá tn kém duy trì ch- mc khi thc hin các lnh c#p nh#t, xóa
hoc chèn, và ch- mc s, rt ln
Nhp môn H qun tr c s d liu DB2
196
CREATE UNIQUE INDEX idx4 ON customer(info)
GENERATE KEY USING
xmlpattern ‘//text()’
AS sql VARCHAR(40)
Nhp môn H qun tr c s d liu DB2
197
Bài tp nhanh #12 – SQL/XML và XQuery
Mc ích
Bn ã thy nhiu ví d v cú pháp ca SQL/XML và XQuery và ã c gii thiu
trong DB2 Command Editor và công c DB2 Developer Workbench. Trong bài t#p này,
bn hãy kim tra s hiu bit ca bn v SQL/XML và XQuery bng vic thc hành vi
các công c này. Ta s, s dng c s d liu “mydb” c to ra bng vic s dng
tp kch bn table_creation.txt mà chúng ta ã gii thích trong các chng trc.
Th tc
1. To c s d liu “mydb” và np d liu XML, nh ã trình bày chng trc
2. S dng hoc Ca s lnh hoc DWB:
a. Tìm ra tt c các ni dung chú thích (comments) trong tài liu XML trong
bng ITEMS bng hai cách, ch- s dng XQuery
b. Ti sao khi ta s dng lnh SQL sau li không a ra cùng kt qu?
SELECT comments FROM items
c. Tìm ra ID và BRANDNAME ca các bn ghi mà tài liu XML ca nó có giá
tr ca trng ResponseRequested là “No”
Li gii
2a)
xquery db2-fn:xmlcolumn(‘ITEMS.COMMENTS’)
xquery db2-fn:sqlquery(“select comments from items”)
2b)
Kt qu khác nhau là vì SQL tr li giá tr NULL khi không có giá tr, còn XQuery
không tr li gì c.
2c)
SELECT id, brandname FROM items WHERE
XMLEXISTS(‘$c/Comments/Comment[ResponseRequested=”No”
passing ITEMS.COMMENTS as “c”
Nhp môn H qun tr c s d liu DB2
198
17
Chng 17 – Phát trin vi Java, PHP và Ruby
Chng này s, tho lu#n nhng vn c bn ca vic phát trin ng dng trong Java,
PHP và Ruby trên nn Rails s dng mt máy ch DB2. Mc ích ca chng này
không nhm hng d%n v các ngôn ng trên, nhng nó cung cp thông tin thích hp
trong vic s dng chúng vi DB2.
17.1 Phát trin ng dng b6ng Java
Trình iu khin IBM DB2 cho JDBC (c bit n nh trình iu khin JCC) c
xem là ti u i vi các máy ch DB2 trên tt c các nn tng. Tp db2jcc.jar
(com.ibm.db2.jcc) bao g+m trình iu khin kiu 2 và kiu 4. Tp db2jcc.jar c.ng bao
g+m bt c máy khách DB2 nào, hoc nó có th c thy (trình iu khin IBM DB2
cho JDBC và SQLJ) t* trang web DB2 Express-C (ibm.com/db2/express)
17.1.1 Trình iu khin JDBC kiu 2 (type 2)
Trình iu khin JDBC kiu 2 yêu cu mt máy khách DB2 ã c cài t ni mà ng
dng JDBC s, thc thi. Hình 17.1 minh h&a mt ng dng JDBC s dng trình iu
khin kiu 2.
Hình 17.1 – Trình iu khin JDBC kiu 2
Hình 17.2 a ra mt on mã lnh cho ta thy làm th nào thit l#p mt kt ni s
dng trình iu khin JDBC kiu 2. Lu ý là URL không bao g+m hostname hoc thông
tin v cng bi vì iu này c thc hin t* máy khách DB2.
Nhp môn H qun tr c s d liu DB2
199
Hình 17.2 – Thit lp mt kt ni s" dng trình iu khin JDBC kiu 2
17.1.2 Trình iu khin JDBC kiu 4
Trình iu khin JDBC kiu 4 không yêu cu mt máy khách phi kt ni n mt máy
ch DB2. Hình 17.3 minh h&a mt ng dng JDBC s dng trình iu khin kiu 4.
Hình 17.3 – Trình
iu khin JDBC kiu 4
Hình 17.4 a ra mt on mã lnh cho ta thy làm th nào thit l#p mt kt ni s
dng trình iu khin JDBC kiu 4. Lu ý là URL bao g+m c hostname hoc thông tin
v cng.
Nhp môn H qun tr c s d liu DB2
200
Hình 17.4 – Thit lp mt kt ni s" dng trình iu khin JDBC kiu 4
17.2 Phát trin ng dng b6ng PHP
PHP (PHP Hypertext Preprocessor) là mt ngu+n m, là ngôn ng kch bn c l#p v
nn tng c thit k cho vic phát trin ng dng Web. /ó là mt trong nhng ngôn
ng web c trin khai rng rãi nht trên th gii hin nay. Tính ph bin ca PHP da
trên các c trng ca ngôn ng:
- Nhanh, d0 h&c t* thp n cao
-
Mnh, tính thc thi cao và kh chuyn
-
6n nh và an toàn
-
Mt s la ch&n i vi J2EE và .NET trên nn Web.
-
D0 dàng tích hp vào các môi trng/h thng không thun nht.
-
/c chng t" thông qua trin khai rng rãi
-
To nên mt cng +ng y sc sng
PHP là b ph#n ca LAMP (vit tt ca các t* Linux, Apache HTTP Server, MySQL,
PHP / Perl / Python). /ây là mt nhóm công ngh web mã ngu+n m, thng s)n có
trên các nhà cung cp (ISP) vi giá hp lý.
17.2.1 La chn kt ni DB2 cho PHP
IBM h tr truy xut n c s d liu DB2 t* các ng dng PHP thông qua hai phn
m rng.
ibm_db2:
Phn m rng ibm_db2 a ra mt giao din l#p trình th tc ng dng cho phép to,
&c, c#p nh#t và ghi các thao tác c s d liu thêm vào ó m rng truy xut n siêu
c s d liu. Nó có th c biên dch làm vic vi PHP 4 hoc PHP 5. Phn m
rng s)n có t* kho th vin PECL di s cho phép ca Apache 2.0. Nó c IBM phát
trin và h tr. Có y các c tính h tr cho các th tc lu tr và LOBs, nhanh, và
c ti u cho DB2.
PDO_ODBC:
PDO_ODBC là trình iu khin cho phn m rng ca Các i tng d liu PHP (PHP
Data Objects - PDO), và s)n sàng truy c#p n c s d liu DB2 thông qua mt giao
din c s d liu hng i tng ã c th tc hóa trong PHP 5.1. Nó có th
tng thích ngc vi các th vin ca DB2 mt cách t ng. Nó cung cp mt giao
din truy xut d liu tiêu chu n cho PHP. Nhanh chóng, nh7 nhàng, và hng i
tng. Phn m rng PDO_ODBC s dng các th vin DB2 truy xut mt cách t
nhiên, và nó ã c xây dng trong PHP 5.1. Có th tham kho thêm ti:
•
•
Kt ni n mt c s d liu DB2 cha phân loi (uncalalogued)
/on mã 17.1 cho thy làm th nào kt ni n c s d liu DB2 s dng mt trong
hai phn m rng ã c mô t trên.
Nhp môn H qun tr c s d liu DB2
201
*on mã 17.1 – Kt ni n mt c s d liu bên ngoài
/on mã 17.2 cung cp mt ví d cho mt ng dng PHP n gin s dng phn m
rng ibm_db2
*on mã 17.2 – Mt ng dng PHP n gin s" dng phn m rng ibm_db2
Cu hình PHP cho jbm_db2
Trong Linux hoc UNIX bn cn thay i tp php.ini nh sau:
extension=ibm_db2.iso
ibm_db2.instance_name=<instance name>
/i vi Windows, thay i tp php.ini nh sau:
extension=php_ibm_db2.dll
Tip theo, bn có th ti và cài t b ng dng Zend Core for IBM s, c mô t
trong phn tip theo, và *ng ngi v các vng mc cu hình này.
17.2.2 4ng dng công ngh Zend Core dành cho IBM
Zend [Core] là b công c PHP hoàn ch-nh cho môi trng phát trin và sn xut các
ng dng web ti quan tr&ng cho doanh nghip. Zend [Core] th hin s tin c#y, hiu
qu và s linh hot cn thit cho vic v#n hành nhng ng dng PHP. Zend [Core] có
th c ti v ti a ch- sau:
Zend [Core] cho IBM bào g+m cài t DB2 và máy khách IDS, mt máy ch HTTP ca
Apache (tùy ch&n), PHP5 và mt s th vin ph bin kèm theo bao g+m: ibm_db2,
PDO_INFOMIX. Zend [Core] cho IBM c.ng có th cài t máy ch DB2 Express-C, máy
ch IBM Cloudscape
TM
, b hng d%n s dng PHP, và mt s ng dng ví d trên
DB2. Zend [Core] th hin s tin dng và cài t môi trng PHP mt cách d0 dàng,
xem hình minh h&a 17.5, 17.6 và 17.7.
Nhp môn H qun tr c s d liu DB2
202
Hình 17.5 – C"a s qun lý và iu khin ca Zend [Core]
Hình 17.6 – C"a s cu hình PHP ca Zend [Core]
Nhp môn H qun tr c s d liu DB2
203
Hình 17.7 – C"a s cu hình PHP ca Zend
17.3 Phát trin ng dng Ruby trên nn Rails
Ruby là mt ngôn ng kch bn hng i tng, ng và a nn da trên mã ngu+n
m. Ruby giúp cho phát trin các ng dng mt cách d0 dàng, nhanh chóng và còn bao
g+m t#p hp các th vin rt phong phú. Ruby là ngôn ng l#p trình n gin, g&n nh7
c phát trin bi Yukihiro Matsumoto (“Matz”) vào nm 1995.
Rails là mt b khung hoàn ch-nh cho vic phát trin các ng dng web da trên c s
d liu do Ruby phát trin. Rails cài t kin trúc model-view-controller (MVC). Rails ni
lên nh là mt trong nhng khung phát trin ng dng web mnh nht k t* nm 2004
do David Heinemeier Hansson phát trin.
17.3.1 B công c phát trin DB2 trên nn Rails
IBM nh#n ra c tm quan tr&ng ca Ruby trên nn Rails trong cng +ng phát trin
ng dng web. Chính vì lý do ó mà IBM ã to ra b công c phát trin DB2 trên nn
Rails (Startup Toolkit for DB2 on Rails). /ây là b cài t c tích hp li to nên
mt môi trng phát trin DB2 bng Ruby trên nn Rails. B công c này có th
download ti a ch-:
B công c này bao g+m:
B cài t
Hng d%n cài t và cu hình Ruby và Rails
B cài t DB2 – Express C 9 và b công c kèm theo
Các trình iu khin (driver) cho DB2 Ruby và b thích hp cho DB2 Rails
Ví d và bài t#p
Nhp môn H qun tr c s d liu DB2
204
A
Ph lc A – G/ ri
Trong phn này, chúng ta s, nói v cách làm th nào 0 gii quyt (g( ri) nhng vn
có th gp phi khi làm vic vi DB2. Hình A.1 cung cp mt s + tng quan v
nhng vic chúng ta nên làm khi gp s c.
Hình A.1 - Tng quan v vic g/ ri
A.1 Thêm thông tin v mã các li
/ thu th#p c nhiu thông tin hn t* on mã li mà chúng ta nh#n c hãy nh#p
mã li mà bn nh#n c vi du ch m h"i (?) vào vùng nh#p lnh và nhn vào nút
Execute, nh trong hình A.2 di ây
Nhp môn H qun tr c s d liu DB2
205
Hình A.2 - Tìm kim thông tin v on mã b$ li
Du chm h"i (?) s, g&i n trình tr giúp (Help) ca DB2. Di ây là mt s ví d v
kích hot trình help, ví d nh#n c mã li SQL là “-104”. Tt c nhng ví d di ây
là tng ng
db2 ? SQL0104N
db2 ? SQL104N
db2 ? SQL – 0104
db2 ? SQL – 104
db2 ? SQL – 104N
A.2 SQLCODE and SQLSTATE
Mt SQLCODE là mã nh#n c sau khi m&i câu lnh SQL ã c chy. Ý ngh'a ca
các giá tr nh sau:
SQLCODE = 0; lnh thành công
SQLCODE > 0; lnh thành công nhng chng trình có cnh báo
SQLCODE < 0; lnh không thành công và tr v mt li
SQLSTATE g+m 5 ký t, chui này tuân theo chu n ISO/ANSI SQL92. Hai ký t u
tiên cho ta bit mã lp SQLSTATE
00: lnh thành công
01: có cnh báo
02: không tìm thy iu kin
Tt c các mã lp khác c xem nh có li
A.3 Nht ký khai báo qun tr$ DB2
Nh#t ký khai báo qun tr cung cp công c dùng ch n oán thông tin v các li ti
các im phát sinh li. 4 h iu hành Linux/Unix thì nh#t ký thông báo qun tr
(Administration Notification) là mt tp vn bn <tên th hin>.nfy (ví d “db2inst.nfy”). 4
h iu hành Windows, tt c các khai báo qun tr u c ghi vào Windows Event
Log.
Nhp môn H qun tr c s d liu DB2
206
Tham s cu hình DBM notifylevel cho phép ngi qun tr ch- ra mc thông tin
c ghi li
0 - không có khai báo qun tr nào c gi li (không khuyn khích)
1 - li nng hoc không th phc h+i
2 - hành ng cn c thc hin ngay l#p tc
3 - thông tin quan tr&ng, không cn hành ng ngay l#p tc (mc nh)
4 - thông ip
A.4 db2diag.log
Db2diag.log cung cp thông tin chi tit hn v nh#t ký khai báo qun tr DB2. Nó thng
ch- c s dng bi nhân viên h tr k$ thu#t DB2 hay ngi qun tri có kinh nghim.
Thông tin trong db2diag.log bao g+m:
- V trí ca mã DB2 phát sinh li
- Mt chng trình nh#n dng, cho phép bn có th so sánh nhng dòng ca
ng dng trên tp db2diag.log trên náy ch và máy khách.
- Mt thông ip ch n oán (bt u bng “DIA”) gii thích nguyên nhân ca li
- Các d liu h tr s)n có, nh là cu trúc d liu SQLCA và con tr" n v trí
ca kt xut hoc tp b%y
4 Windows, db2diag.log c cha trong mt th mc mc inh:
C:\Program Files\IBM\sqllig\<instance name>\db2diag.log
4 Linux/Unix db2diag.log c cha trong th mc mc nh:
/home/<instance_ owner>/sqllid/db2trum/db2diag.log
Ý ngh'a ca ch n oán c quyt nh bi tham s cu hình dbm cfg DIAGLEVEL.
Cp t* 0 n 4, 0 là ít ý ngh'a nht và 4 là cao nht, mc nh là 3
A.5 Theo vt CLI
Vi CLI và các ng dng Java, bn có th b#t tin ích theo vt CLI khc phc nhng
s c cho nó. /iu này có th c làm bng cách sa i tp db2cli.ini máy ch, ni
mà ng dng ca bn ang chy. Nhng trng c trng ca db2cli.ini c ch- ra
bên di:
Theo vt mc thp c.ng s)n có (db2trc), nhng nó thng c nhân viên h tr k$
thu#t s dng.
A.6 Khc phc và s"a li trong DB2
/ôi khi mt li mà bn thình lình gp phi li là nguyên nhân ca mt s c (li) ca
DB2. IBM s, u n phát hành nhng bn sa li (Fixpacks) sa cha nhng li ó
(APARs). Trong tp vn bn ca bn sa li có cha danh sách nhng li mà nó sa
cha c. Khi phát trin mt ng dng mi chúng ta nên c#p nh#t nhng bn sa li
mi nht tránh nhng vn có th xy ra trong khi làm vic. / xem phiên bn hin
Nhp môn H qun tr c s d liu DB2
207
ti ca bn sa li, ch&n About t* trình n Help, t* ca s lnh gõ “db2level”. Lu ý
rng, bn sa li và s h tr t* IBM ch- có hiu lc trong DB2 Express–C khi bn mua
bn quyn 12 tháng
Ngun tài nguyên
Các trang web
1.1. Trang web chính thc ca DB2 Express-C:
www.ibm.com/db2/express
Website này cho phép bn download các file cài t cho máy ch DB2, máy khách
DB2, các driver dành cho DB2, bn c.ng có th tìm thy các hng d%n s dng,
hoc tìm &c blog ca nhóm phát trin DB2, ng ký nh#n email ti ây.
1.2. Di0n àn DB2 Express:
Bn có th s dng Di0n àn này ng ti các vn v k$ thu#t mi khi bn
không th t mình tìm thy câu tr li cho các vn ó.
1.3. Trung tâm d liu DB2
Trung tâm d liu cung cp ngu+n tài liu hng d%n trc tuyn. /ây là ngu+n tài
nguyên c c#p nh#t mt cách thng xuyên nht.
1.4. developerWorks
Website này là mt ngu+n tài nguyên tuyt vi cho nhng ngi phát trin và
nhng ngi qun tr h thng c s d liu tìm thy c nhiu bài vit, bài
hng d%n, v.v… hoàn toàn mi0n phí.
1.5. alphaWorks
Website này cho phép bn truy xut trc tip vào các công ngh ni tri ca IBM.
/ây là ni bn có th tìm thy nhng công ngh mi nht t* Phòng Nghiên cu ca
IBM.
1.6. planetDB2
/ây là ni t#p hp nhiu blog ca nhng ngi phát trin DB2.
1.7. H tr k$ thu#t DB2
Nu bn ã ng ký h tr k$ thu#t 12 tháng t* DB2 Express-C, bn có th
download các bn vá li t* Website này:
Nhp môn H qun tr c s d liu DB2
208
Sách
1. Free Redbook: DB2 Express-C: The Developer Handbook for XML, PHP, C/C++,
Java, and .NET
Whei-Jen Chen, John Chun, Naomi Ngan, Rakesh Ranjan, Manoj K. Sardana,
Tháng 8 nm 2006 – SG24-7301-00
2. Understanding DB2 – Learning Visually with Examples V8.2
Raul F. Chong, Clara Liu, Sylvia Qi, Dwaine Snow.
Tháng 1 nm 2005 – ISBN: 0-13-185916-1
3. DB2 9: pureXML overview and fast start
Cynthia M. Saracco, Don Chamberlin, Rav Ahuja
Tháng 1 nm 2006 – SG24-7298
4. DB2® SQL PL: Essential Guide for DB2® UDB on Linux™, UNIX®, Windows™,
i5/OS™, and z/OS®, 2
nd
Edition
Zamil Janmohamed, Clara Liu, Drew Bradstock, Raul Chong, Michael Gao, Fraser
McArthur, Paul Yip
ISBN: 0-13-100772-6
5. Free Redbook: DB2 pureXML Guide
Whei-Jen Chen, Art Sammartino, Dobromir Goutev, Felicity Hendricks, Ippei Komi,
Ming-Pang Wei, Rav Ahuja, Matthias Nicola.
Tháng 8 nm 2007.
6. Information on Demand – Introduction to DB2 9 New Features
Paul Zikopoulos, George Baklarz, Chris Eaton, Leon Katsnelson
ISBN-10: 0071487832
ISBN-13: 987-0071487832
7. Redbook: Developing PHP Applications for IBM Data Servers.
Whei-Jen Chen, Holger Kirstein, Daniel Krook, Kiran H Nair, Piotr Pietrzak
Tháng 5 nm 2006 – SG24-7218-00
Email liên h
Hp th DB2 Express-C:
Hp th DB2 dành cho các trng /i h&c:
Nhp môn H qun tr c s d liu DB2
209
B t u vi DB2 không th nào d dàng hn. *c cun sách này :
- Tìm thy tt c nhng iu v DB2 Express-C.
- Hiu v kin trúc ca DB2, các công c và bo m#t DB2.
- H&c cách qun tr C s d liu DB2.
- Vit mã SQL, XQuery.
- Phát trin chng trình ng dng s dng c s d liu DB2.
- Luyn t#p bng nhng bài t#p thc hành.
- Chu n b cho k thi DB2 trong trng.
S phát trin nhanh chóng ca XML, Web 2.0, và SOA ã d%n n nhng nhu cu v
mt loi h qun tr d liu lai mang tính cách tân. DB2 Express-C ca IBM là mt h
qun tr d liu mi0n phí, không gii hn, và là c s d liu LAI có kh nng qun tr c
XML và d liu quan h thun túy mt cách d0 dàng. Mi0n phí ngh'a là DB2 Express-C
có th c t do ti v, t do bn xây dng ng dng, t do trin khai sn ph m,
và t do phân phi li các gii pháp ca bn. Và, DB2 không t mt gii hn nào cho
kích thc d liu, s lng d liu, hoc s lng ngi s dng.
DB2 Express-C chy trên h thng Windows và Linux và h tr nhiu ngôn ng l#p trình
khác nhau, bao g+m c C/C++, Java, .NET, PHP, Perl, và Ruby. Nhng h tr trc
tuyn c.ng có th c ng ký vi giá thp. Nu bn mun có nhiu chc nng cao
cp hn na i vi mt h qun tr c s d liu, bn có th d0 dàng trin khai nhng
ng dng ã c xây dng bng DB2 Express-C lên nhng n bn DB2 khác nh
DB2 Enterprise.
;n bn DB2 mi0n phí này rt lý tng cho nhng ngi phát trin, nhng ngi t vn,
nhng ngi bán phn mm c l#p, các qun tr viên c s d liu, sinh viên, hoc bt
k ai có ý nh phát trin, th nghim, trin khai, hoc phân phi các ng dng v c s
d liu. Hãy tham gia vào s phát trin ca cng +ng nhng ngi s dng DB2
Express-C ngay hôm nay. Bn s, khám phá ra cách hoàn toàn mi to ra chng
trình ng dng, c.ng nh cách phát trin nhng gii pháp t phá.