Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
1,15 MB
Nội dung
Nhp môn H qun tr c s d liu DB2 168 Hình 15.1 – Ví d v b%y trc Trong hình 15.1, b%y “defalt_class_end” s, b%y trc lnh khi INSERT SQL c thc hin trong bng cl_sched. Bng này là mt phn ca c s d liu SAMPLE, ban có th to và th kim tra b%y này khi kt ni vi c s d liu này. Bin “n” trong nh ngh'a ca b%y s, i din cho giá tr mi ca lnh INSERT, giá tr s, chèn vào. B%y này s, kim tra s hp l ca các giá tr chèn vào. Nu ct “ending” không có giá tr gì khi chèn, thì b%y này s, m bo chc chn là có giá tr ca ct “starting” cng 1 c chèn vào. Các lnh sau giúp ta kim tra b%y này C:\Program Files\IBM\SQLLIB\BIN>db2 insert into cl_sched (class_code, day, starting) values ('abc',1,current time) DB20000I The SQL command completed successfully. C:\Program Files\IBM\SQLLIB\BIN>db2 select * from cl_sched CLASS_CODE DAY STARTING ENDING 042:BF 4 12:10:00 14:00:00 553:MJA 1 10:30:00 11:00:00 543:CWM 3 09:10:00 10:30:00 778:RES 2 12:10:00 14:00:00 044:HD 3 17:12:30 18:00:00 abc 1 11:06:53 12:06:53 6 record(s) selected. Th tc b%y “validate_sched” di ây cho phép m rng hàm b%y “default_class_end” ã mô t trc ây. Xin nhc li rng, bn có th to ra nó và kim tra nó da vào c s d liu SAMPLE. CREATE TRIGGER validate_sched NO CASCADE BEFORE INSERT ON cl_sched REFERENCING NEW AS n FOR EACH ROW MODE DB2SQL BEGIN ATOMIC supply default value for ending time if null Nhp môn H qun tr c s d liu DB2 169 IF (n.ending IS NULL) THEN SET n.ending = n.starting + 1 HOUR; END IF; ensure that class does not end beyond 9pm IF (n.ending > '21:00') THEN SIGNAL SQLSTATE '80000' SET MESSAGE_TEXT='class ending time is beyond 9pm'; ELSEIF (n.DAY=1 or n.DAY=7) THEN SIGNAL SQLSTATE '80001' SET MESSAGE_TEXT='class cannot be scheduled on a weekend'; END IF; END B%y sau B%y sau c kích hot sau khi các SQL triggering thc hin thành công. Các thao tác trong b%y này có th kích hot các b%y khác (s ni tng c cho phép n 16 mc). B%y sau h tr các thao tác INSERT, UPDATE và DELETE. Di ây là ví d ca mt b%y sau CREATE TRIGGER audit_emp_sal AFTER UPDATE OF salary ON employee REFERENCING OLD AS o NEW AS n FOR EACH ROW MODE DB2SQL INSERT INTO audit VALUES ( CURRENT TIMESTAMP, ' Employee ' || o.empno || ' sal- ary changed from ' || CHAR(o.salary) || ' to ' || CHAR(n.salary) || ' by ' || USER) Trong ví d này thì th tc b%y audit_emp_sal c s dng thc hin vic kim tra trên ct salary ca bng employee. Khi mt ai ó to s thay i trong ct này thì on mã này s, thc hin vic ghi thông tin v vic thay i liên quan n bng Salary vào trong bàng khácg&i là audit. Ti dòng “OLD as o NEW as n ” ch- ra tin t “o” này s, c dùng i din giá tr c. hoc giá trì t+n ti trong bng, và tin t “n” s, c s dng i din giá tr mi sau ó t* câu lnh UPDATE. Nh v#y, “o.salary” miêu t giá tr c. hoc giá tr t+n ti trong bng Salary còn “n.salary” miêu t giá tr c c#p nh#t mi vào ct d liu Salary. B%y s kin thay th B%y thay th c nh ngh'a trên các khung nhìn (view). /nh ngh'a mt cách logic b%y này s, thc hin vic c#p nh#t cho các lnh SQL triggering. Ví d nh, nu bn thc hin mt thao tác c#p nh#t trên mt khung nhìn, b%y thay th s, c thc thi thc hin vic c#p nh#t các bng gc mà các khung nhìn này th hin. Các th tc b%y không c to t* DB2 Developer Workbench. Chúng có th c to t* trung tâm iu khin hoc t* các công c dòng lnh khác (Command Window, Command Line Processor, hoc Command Editor) Nhp môn H qun tr c s d liu DB2 170 Bài tp nhanh #10 - Khi to mt b%y b6ng Trung tâm iu khin. Mc tiêu B%y là mt i tng c s d liu c s dng hoàn thành công vic kinh doanh mt cách cht ch, khi xy ra thay i d liu trên bng (chèn, sa, xóa). Trong bài t#p nhanh này, bn s, to mt b%y bng vic s dng Trung tâm iu khin. Cái b%y này s, lu nh#t ký bán hàng trong bng SALES (bán hàng) cho mc ích kim tra s sách. Bn s, ghi vào nh#t ký bán hàng mã ca ngi bán hàng (user ID) cùng vi thi im bán. Th tc: 1. M Trung tâm iu khin. 2. Vi bài t#p nhanh này, bn s, cn khi to mt bng ph c s dng ghi nh#t ký bán hàng. Khi to mt bng theo các thuc tính sau: Tên bng: saleslog (nh#t ký bán hàng) Ct u tiên: Tên: userid (mã ) Kiu d liêu: VARCHAR(128) Các thuc tính khác: NOT NULL Ct th hai: Tên: daytime (thi im) Kiu d liu: TIMESTAMP Các thuc tính khác: NOT NULL Gi ý: Khi to bng này s dng CREATE TABLE có trong ca s nh#p lnh, hoc s dng Create table wizard t* Trung tâm iu khin. 3. T* Trung tâm iu khin, m rng tài liu c s d liu EXPRESS. Nhp chut phi trong th mc Trigger, và ch&n mc “Create”. Ca s i thoi khi to b%y m ra. 4. /in y theo thông tin trong ca s i thoi: S + b%y (Trigger schema): User ID (mã) ca ngi bán ã c nh#p vào (nên c cài t mc nh) Tên b%y (Trigger name): audit_sales (Kim tra bán hàng) Bng hay s + hin th: User ID (mã) ca ngi bán ã c nh#p vào (nên c cài t mc nh) Bng hay tên hin th (Table or view name): SALES (bán hàng) Thi gian b%y hot ng (Time to trigger action): After (sau) Khi nào thì b%y c thc hin (Operation that causes the trigger to be executed): Update of columns (không lit kê bt c ct nào vì chúng ta mun b%y thc hin khi bt c ct nào trong s các ct c c#p nh#t) Chú thích (Comment): Logs all update actions on Sales table (Ghi nh#t ký tt c các hot ng c#p nh#t trong bng Sales) Nhp môn H qun tr c s d liu DB2 171 5. Trong bng Triggerred action, ch&n STATEMENT trong mc tùy ch&n For Each. Nh#p on mã ngu+n sau vào mc hành ng ca b%y: WHEN (1=1) BEGIN ATOMIC INSERT INTO saleslog (userid, daytime) VALUES (CURRENT USER, CURRENT TIMESTAMP); END (Ghi chú: on b%y s, c thc hin mt ln sau khi b%y c kích hot và kt thúc hoàn toàn. B%y theo dòng ngh'a là hot ng ca b%y s, thc hin mt khi SQL triggering tác ng vào mt dòng.) Nhp môn H qun tr c s d liu DB2 172 Kích ch&n nút OK khi to b%y. 6. Bây gi bn nên xem li b%y ã c khi to trong tài liu Triggers th mc Trung tâm iu khin. 7. Truy vn bng Saleslog m bo cha có d liu trong bng này. Loi b" nhng hàng có d liu trong bng bng lnh DELETE FROM saleslog. 8. Th c#p nh#t mt bn ghi trong bng sales (Gi ý: s dng Command Editor hoc SQL Assist Wizard). 9. Kim tra li mt ln na ni dung ca bng saleslog. Xem có bao nhiêu hàng trong ó. 15.3 Hàm ngi dùng $nh ngh-a (UDF) Hàm ngi dùng nh ngh'a là mt i tng ng dng c s d liu, nó c sp xp thành b d liu nh#p và d liu xut. Ví d: mt hàm có th ly kích thc d liu vào bng inch, và tr li kt qu bng centimetes. DB2 h tr to nhng hàm s dng SQL PL, C/C++, Java, CLR (Common Language Runtime), và OLE (Object Linking and Embedding). Trong cun sách này, chúng tôi nói ch yu v hàm SQL PL bi tính n gin, ph bin và hiu sut ca chúng. Có là 4 loi hàm: hàm vô hng (Scalar Funcitons), hàm bng (Table Functions) , hàm dòng (Row Functions), và hàm ct (Column Functions). Trong bài này chúng tôi ch- t#p trung vào hàm vô hng và hàm bng. 15.3.1 Hàm vô hng Hàm vô hng tr li mt giá tr n. Nó không th cha các câu lnh SQL, các câu lnh INSERT, UPDATE và DELETE s, làm thay i trng thái ca c s d liu thì không c chp nh#n. Mt vài hàm vô hng c cài t s)n là SUM(), AVG(), DIGITS(), COALESCE(), và SUBSTR(). Nhp môn H qun tr c s d liu DB2 173 DB2 cho phép bn tùy bin xây dng hàm ngi dùng nh ngh'a, t* ó bn có th thng xuyên s dng nó theo ý ngh'a logic. Ví d, tính n s chuyn i ng dng ca bn t* Oracle sang DB2. Trong ng dng này, bn g&i hàm NVL() ca Oracle khp ni. Hàm tng ng cài t s)n trong DB2 c g&i là COALESCE. Thay vì bn phi i tên tt c các hàm NVL trong ng dng thành COLALESCE, bn có th to mt UDF trong DB2 g&i nó là NVL, và nó s, kích hot hàm COLALESCE khi c g&i; ta s, vit hàm NLV nh di ây: CREATE FUNCTION NVL (p_var1 VARCHAR(30) , p_var2 VARCHAR(30)) SPECIFIC nvlvarchar30 RETURNS VARCHAR(30) RETURN COALESCE (p_var1 , p_var2) Hàm COALESCE trong trng hp này tr li i s u tiên là không rng (not NULL) Di ây là mt ví d khác ca hàm vô hng. Hàm c g&i là “deptname”, và nó tr li mã s ca phòng/ban (department) ca mt nhân viên da trên các mã (ID) ca h&: CREATE FUNCTION deptname(p_empid VARCHAR(6)) RETURNS VARCHAR(30) SPECIFIC deptname BEGIN AUTOMIC DECLARE v_department_name VARCHAR(30); DECLARE v_err VARCHAR(70); SET v_department_name =( SELECT d.deptname FROM department d,employee e WHERE e.workdept = d.deptno AND e.empno = p_empid); SET v_err = ‘Error:employee’ || p_empid || ‘was not found’; IF v_department_name IS NULL THEN SIGNAL SQLSTATE ‘80000’ SET MESSAGE_TEXT = v_err; END IF; RETURN v_department_name; END / kim tra li hàm, th li trong Command Window hoc Linux/UNIX vi lnh: db2 “values (deptname(‘000300’))” Gi hàm vô hng Hàm vô hng ca ngi dùng có th c g&i trong câu lnh SQL, bt k âu giá tr vô hng c s dng, hoc trong mnh liên quan n mt “Giá tr”. /ây là hai ví d biu di0n li g&i hàm vô hng COALESCE: SELECT DEPTNAME, COALESCE(MGRNO,‘ABSENT’)FROM DEPARMENT VALUES COALESCE(‘A’,‘B’) 15.3.2 Hàm bng Hàm bng tr li mt bng ca các bn ghi. Bn có th g&i chúng trong mnh FROM ca mt truy vn. Hàm bng ngc li vi hàm vô hng là có th thay i trng thái c s d liu, bi v#y, các câu lnh INSERT, UPDATE và DELETE c chp nh#n. Mt vài hàm bng c cài t s)n là SNAPSHOT_DYN_SQL() và MQREADALL(). Hàm bng c.ng ging nh khung nhìn (view), nhng ây nó cho phép các lnh làm thay i Nhp môn H qun tr c s d liu DB2 174 d liu (chèn, sa, xóa) mt cách mnh hn. /in hình là chúng thng tr li mt bng hoc gi li mt bn ghi kim tra. Di ây là mt ví d ca hàm bng lit kê mt nóm nhân viên trong phòng: CREATE FUNCTION getEnumEmployee(p_dept VARCHAR(3)) RETURNS TABLE (empno CHAR(6), lastname VARCHAR(15), firstnme VARCHAR(12)) SPECIFIC getEnumEmployee RETURN SELECT e.empno, e.lastname, e.firstnme FROM employee e WHERE e.workdept = p_dept / kim tra hàm trên, th li vi câu lnh sau: db2 “SELECT * FROM table(getEnumEmployee(‘D11’)) AS t” Gi hàm bng Mt hàm bng ngi dùng nh ngh'a c g&i trong mnh FROM ca câu lnh SQL. Hàm TABLE() cn s dng và ph i có bí danh. Hình 15.2 minh h&a mt ví d ca cách g&i hàm “getEnumEmployee” mà chúng tôi ã kim tra. Hình 15.3 - L i gi mt hàm bng. Nhp môn H qun tr c s d liu DB2 175 Bài tp nhanh #11 - Khi to UDF s" dng DB2 Developer Wordbench Mc ích: DB2 Developer Workbench (DWB) là mt công c phát trin (IDE) vit các th tc và các hàm.Trong bài t#p nhanh này, các bn s, phi to mt hàm vô hng do ngi dùng nh ngh'a trong DWB. Vic này s, em li cho bn nhiu kinh nghim hn vi DBW, tt cho vic trau d+i kin thc vi ngôn ng SQL PL xây dng các hàm ngi dùng nh ngh'a. Quy trình thc hin: 1. M DBW ( Gi ý: có s)n trong bng ch&n Start) 2. T* ca s Data Project Explorer ch&n d án bn ã to bài t#p nhanh trc và ch&n Open Project. 3. Kích chut phi vào th mc User-Defined Functions. Ch&n mc New. Sau ó ch&n mc SQL User-Defined Function. Bn có th ch&n mc User-Defined Function using Wizard nu cn c hng d%n trong sut quá trình s dng. 4. Trình son tho m vi hàm chính. R+i sa i mã lnh nh di ây: CREATE FUNCTION booktitle(p_bid INTEGER) RETURNS VARCHAR(300) SQL UDF (Scalar) SPECIFIC booktitle F1: BEGIN ATOMIC DECLARE v_book_title VARCHAR(300); DECLARE v_err VARCHAR(70); SET v_book_title = (SELECT title FROM books WHERE p_bid = book_id); SET v_err = ‘Error: The book with ID ‘ || CHAR(p_bid) || ‘was Not found.’; IF v_book_title IS NULL THEN SIGNAL SQLSTATE ‘80000’ SET MESSAGE_TEXT = v_err; END IF; RETURN v_book_title; END 5. Xây dng hàm bng cách kích chut phi trên hàm và ch&n Deploy. 6. Cho chy hàm bng cách kích chut vào nút Run trên thanh công c. 7. Sau khi hàm chp nh#n nh#p mt tham s vào, mt ca s thông báo hin ra yêu cu bn in giá tr cho tham s. Nh#p giá tr: 80002 Kt qu là gì? Th li vi giá tr: 1002 /iu gì xy ra lúc này? (gi ý: Nhìn vào on Messages ca Out-put view) 8. /óng DBW khi bn ã hoàn thành. Nhp môn H qun tr c s d liu DB2 176 16 Chng 16 – SQL/XML và XQuery Trong chng này chúng ta bàn v pureXML, mt công ngh mi c cung cp trong DB2 phiên bn 9 h tr vic lu tr thun XML. Nhiu ví d và khái nim c bàn lu#n trong chng này c ly t* sách " IBM: DB2 9: Tng quan và Bt u nhanh vi pureXML (IBM Redbook: DB2 9: pureXML overview and fast start). Xem phn tài nguyên bit thêm thông tin. Hình 16.1 th hin phn kin thc trong bc tranh tng quát ca DB2 s, c c#p trong chng này. Hình 16.1 – Bc tranh tng quát DB2: các lnh DB2, SQL/XML và XQuery 16.1 S" dng XML vi các c s d liu Các tài liu XML c lu di dng t#p tin vn bn, kho XML, hay c s d liu. Có hai nguyên nhân chính là ti sao nhiu công ty xut lu tr XML bng c s d liu: Nhp môn H qun tr c s d liu DB2 177 • Qun lý lng ln h+ s XML là mt vn v c s d liu. XML là d liu ging nh các d liu khác, ch- khác phn nh dng. Nhng nguyên nhân tng t lu tr d liu quan h trên c s( d liu XML: các c s d liu cung cp chc nng tìm kim và rút trích hiu qu, h tr tính bn vng ca d liu mt cách tin c#y, sao lu và phc h+i, h tr giao dch, tính hiu qu và kh nng m rng. • Tính tích hp: bng cách lu tr các tài liu quan h và XML cùng vi nhau, bn có th tích hp d liu XML mi cùng vi d liu quan h ã có, và kt hp SQL vi XPath hay XQuery trong mt câu truy vn. Hn na, d liu quan h có th c chuyn thành XML và ngc li. Thông qua vic tích hp, các c s d liu có th h tr các ng dng web (web applications), SOA (Service Oriented Architecture) và các dch v web (web services). 16.2 C s d liu XML Có hai loi c s d liu lu tr d liu, h+ s XML: C s d liu h tr XML C s d liu thun XML 16.2.1 c s d liu h tr XML Mt c s d liu h tr XML s, s dng mô hình quan h là mô hình chính lu tr d liu. /iu này cn s ánh x gia mô hình d liu XML và mô hình d liu quan h, hoc là lu tr d liu XML nh là i tng ln có thuc tính. Trong khi xem xét vic này nh là công ngh c. thì nhiu nhà cung cp c s d liu v%n s dng cách nh trên. Hình 16.2 gii thích chi tit hn hai la ch&n cho c s d liu h tr XML. Hình 16.2 – Hai la chn lu tr d liu XML trong c s d liu h tr XML Bên trái hình 16.2 cho thy phng thc lu tr tài liu XML trong c s d liu “CLOB và Varchar”. Tài liu XML dùng phng thc này c lu bng c nh CLOB và ct kiu Varchar trong c s d liu. Phng thc này không linh hot bi vì khó tìm c các phn t bên trong nh. Hiu nng ca nó c.ng không cao vì các nh XML thng rt ln do ó tn b nh. Nhiu máy ch d liu, bao g+m máy ch DB2, không ti hình nh vào b nh, mà x lý trc tip trên 'a. S dng hình nh hin nhiên s, không t hiu nng tt. [...]... ng 16.2 cho ta thêm vài ví d d a trên tài li u XML hình 16 .9 XPath /dept/employee/*/text() K t qu John Doe 408 555 1212 344 Peter Pan 408 555 99 18 216 /dept/employee/@id 90 1 90 2 /dept/employee/name Peter Pan John Doe /dept/employee/name/text() Peter Pan John Doe /dept//phone 408 555 1212 408 555 99 18 B ng 16.2 - Các ví d v kí t i di n trong XPath... FIL='Client8877.xml'/>, 90 77,Lisa Hansen,Silver, 91 77,Rita Gomez,Standard,, 5681,Paula Lipenski,Standard,, 43 09, Tina Wang,Standard, Trong t p clients.del, “XDS FIL=” c dùng tr" n m t t p tài li u XML c th Hình 16.11 cho th y trung tâm i u khi n sau khi ch y t p k ch b n trên Nh p môn H qu n tr c... CHAR(8), deptdoc XML); Và tài li u XML sau c thêm vào trong các c t c a deptdoc: John Doe Nh p môn H qu n tr c s d li u DB2 185 408 555 1212 344 Peter Pan 408 555 99 18 216 Thì khi ó câu l nh XQuery sau s d ng FLWOR có th c th c... /dept/employee[2]/@id B ng 16.3 - Các ví d v v$ t& XPath 90 1 90 2 90 2 Nh p môn H qu n tr c s d li u DB2 184 Tr c cha XPath: T ng t v i MS-DOS hay Linux/UNIX, b n có th dùng m t d u ch m (.) trong bi u th c r ng b n tham chi u n v trí hi n t i, và hai d u ch m ( ) chi u n ví trí trên nó m t c p (m c cha) nh ra tham B ng 16.4 cho ta thêm vài ví d XPath /dept/employee/name[ /@id= 90 2”] K t qu Peter Pan /dept/employee/office[.>”300”]... node) c a m t thành ph n, ta s d ng hàm "text()" B ng 16.1 minh h&a m t vài câu truy v n XPath và k t qu t ng ng khi áp d ng trên tài li u XML ã cho hình 16 .9 Nh p môn H qu n tr c s d li u DB2 183 XPath /dept/@bldg /dept/employee/@id K t qu 101 90 1 90 2 /dept/employee/name Peter Pan John Doe /dept/employee/name/text() Peter Pan John Doe B ng 16.1 – Các ví d v bi u th c XPath i... phân c p ã c phân rã Hình 16.4 minh h&a b n cách truy xu t d li u trong DB2 phiên b n 9: S S S S d d d d ng SQL truy xu t d li u quan h ng SQL v i XML m r ng truy xu t d li u XML ng XQuery truy xu t d li u XML ng XQuery truy xu t d li u quan h Nh p môn H qu n tr c s d li u DB2 Hình 16.4 – B n cách truy xu t d 1 79 li u trong DB2 Vì v#y, trong khi m t ng i s d ng SQL xem DB2 nh là m t h qu n tr c s... 9 Hình 16.7 – S t ng hi u n ng khi s" d ng công ngh pureXML 16.3.2 Khái ni m c b n v XPath truy v n các tài li u XML Hình 16.8 mô XPath là m t ngôn ng mà ta có th dùng nó t m t tài li u XML và hình 16 .9 c.ng minh h&a tài li u ó c trình bày v i d ng "phân tích phân c p" (c.ng c g&i là nút (node) hay lá (leaf)) Chúng ta s, x d ng nh d ng "phân tích phân c p" gi i thích XPath ho t ng nh th nào Nh p môn. .. ng ng v i m nh WHERE trong SQL Ví d [@id= "90 2"] có th c hi u là "v i i u ki n thu c tính id có giá tr b ng 90 2" Trong m t bi u th c XPath có th có nhi u v t* / ch- ra m t v t* có v trí, ta s d ng [n] v i ý ngh'a là thành ph n con th n s, c ch&n Ví d employee[2] ngh'a là ng i công nhân th 2 s, c ch&n B ng 16.3 s, cho ta nhi u ví d h n: XPath /dept/employee[@id= 90 2”]/name K t qu Peter Pan... không chuy n sang SQL /ây là nguyên nhân t i sao g&i các c s d li u này là c s d li u thu n XML Hi n t i, DB2 9 là máy ch th ng m i duy nh t cung c p tính n ng này 16.3 XML trong DB2 Hình 16.3 bên d i phác h&a cách th c l u tr d li u quan h và d li u phân c p (các tài li u XML) trong DB2 phiên b n 9 Trong hình, gi s nh ngh'a b ng dept nh sau : CREATE TABLE dept (deptID char(8) ,… , deptdoc XML); Hình 16.3... các hãng khác v c s d li u hay XML không s d ng trùng thu#t ng bi u th cho các công ngh khác Chú ý, s h tr pureXML chc cung c p khi t o ra c s d li u Unicode 16.3.1 7u i m c a công ngh pureXML trong DB2 9 S d ng công ngh pureXML em l i nhi u u i m sau : 1 B n có th nâng cao kh n ng dùng d li u quan h , b ng cách l u tr các tài li u XML trong các c t c a b ng có s d ng ki u d li u m i XML 2 B n có th gi . da trên tài liu XML hình 16 .9 XPath Kt qu /dept/employee/*/text() John Doe 408 555 1212 344 Peter Pan 408 555 99 18 216 /dept/employee/@id 90 1 90 2 /dept/employee/name <name>Peter. áp dng trên tài liu XML ã cho hình 16 .9 Nhp môn H qun tr c s d liu DB2 183 XPath Kt qu /dept/@bldg 101 /dept/employee/@id 90 1 90 2 /dept/employee/name <name>Peter. FIL='Client8877.xml'/>, 90 77,Lisa Hansen,Silver,<XDS FIL='Client9077.xml' /> 91 77,Rita Gomez,Standard,<XDS FIL='Client9177.xml'/>, 5681,Paula Lipenski,Standard,<XDS