nhập môn hệ quản trị Cơ sở dữ liệu phần 9 docx

21 367 0
nhập môn hệ quản trị Cơ sở dữ liệu phần 9 docx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nhp môn H qun tr c s d liu DB2 168 Hình 15.1 – Ví d v b%y trc Trong hình 15.1, b%y “defalt_class_end” s, b%y trc lnh khi INSERT SQL c thc hin trong bng cl_sched. Bng này là mt phn ca c s d liu SAMPLE, ban có th to và th kim tra b%y này khi kt ni vi c s d liu này. Bin “n” trong nh ngh'a ca b%y s, i din cho giá tr mi ca lnh INSERT, giá tr s, chèn vào. B%y này s, kim tra s hp l ca các giá tr chèn vào. Nu ct “ending” không có giá tr gì khi chèn, thì b%y này s, m bo chc chn là có giá tr ca ct “starting” cng 1 c chèn vào. Các lnh sau giúp ta kim 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 tc b%y “validate_sched” di ây cho phép m rng hàm b%y “default_class_end” ã mô t trc ây. Xin nhc li rng, bn có th to ra nó và kim tra nó da vào c s d liu 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 Nhp môn H qun tr c s d liu 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 hot sau khi các SQL triggering thc hin thành công. Các thao tác trong b%y này có th kích hot các b%y khác (s ni tng c cho phép n 16 mc). B%y sau h tr các thao tác INSERT, UPDATE và DELETE. Di ây là ví d ca mt 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 tc b%y audit_emp_sal c s dng  thc hin vic kim tra trên ct salary ca bng employee. Khi mt ai ó to s thay i trong ct này thì on mã này s, thc hin vic ghi thông tin v vic thay i liên quan n bng Salary vào trong bàng khácg&i là audit. Ti dòng “OLD as o NEW as n ” ch- ra tin t “o” này s, c dùng  i din giá tr c. hoc giá trì t+n ti trong bng, và tin t “n” s, c s dng  i din giá tr mi sau ó t* câu lnh UPDATE. Nh v#y, “o.salary” miêu t giá tr c. hoc giá tr t+n ti trong bng Salary còn “n.salary” miêu t giá tr c c#p nh#t mi vào ct d liu Salary. B%y s kin thay th B%y thay th c nh ngh'a trên các khung nhìn (view). /nh ngh'a mt cách logic b%y này s, thc hin vic c#p nh#t cho các lnh SQL triggering. Ví d nh, nu bn thc hin mt thao tác c#p nh#t trên mt khung nhìn, b%y thay th s, c thc thi  thc hin vic c#p nh#t các bng gc mà các khung nhìn này th hin. Các th tc b%y không c to t* DB2 Developer Workbench. Chúng có th c to t* trung tâm iu khin hoc t* các công c dòng lnh khác (Command Window, Command Line Processor, hoc Command Editor) Nhp môn H qun tr c s d liu DB2 170 Bài tp nhanh #10 - Khi to mt b%y b6ng Trung tâm iu khin. Mc tiêu B%y là mt i tng c s d liu c s dng  hoàn thành công vic kinh doanh mt cách cht ch, khi xy ra thay i d liu trên bng (chèn, sa, xóa). Trong bài t#p nhanh này, bn s, to mt b%y bng vic s dng Trung tâm iu khin. Cái b%y này s, lu nh#t ký bán hàng trong bng SALES (bán hàng) cho mc ích kim tra s sách. Bn s, ghi vào nh#t ký bán hàng mã ca ngi bán hàng (user ID) cùng vi thi im bán. Th tc: 1. M Trung tâm iu khin. 2. Vi bài t#p nhanh này, bn s, cn khi to mt bng ph c s dng  ghi nh#t ký bán hàng. Khi to mt bng theo các thuc tính sau: Tên bng: saleslog (nh#t ký bán hàng) Ct u tiên: Tên: userid (mã ) Kiu d liêu: VARCHAR(128) Các thuc tính khác: NOT NULL Ct th hai: Tên: daytime (thi im) Kiu d liu: TIMESTAMP Các thuc tính khác: NOT NULL Gi ý: Khi to bng này s dng CREATE TABLE có trong ca s nh#p lnh, hoc s dng Create table wizard t* Trung tâm iu khin. 3. T* Trung tâm iu khin, m rng tài liu c s d liu EXPRESS. Nhp chut phi trong th mc Trigger, và ch&n mc “Create”. Ca s i thoi khi to b%y m ra. 4. /in y  theo thông tin trong ca s i thoi: S + b%y (Trigger schema): User ID (mã) ca ngi bán ã c nh#p vào (nên c cài t mc nh) Tên b%y (Trigger name): audit_sales (Kim tra bán hàng) Bng hay s + hin th: User ID (mã) ca ngi bán ã c nh#p vào (nên c cài t mc nh) Bng hay tên hin th (Table or view name): SALES (bán hàng) Thi gian  b%y hot ng (Time to trigger action): After (sau) Khi nào thì b%y c thc hin (Operation that causes the trigger to be executed): Update of columns (không lit kê bt c ct nào vì chúng ta mun b%y thc hin khi bt c ct nào trong s các ct c c#p nh#t) Chú thích (Comment): Logs all update actions on Sales table (Ghi nh#t ký tt c các hot ng c#p nh#t trong bng Sales) Nhp môn H qun tr c s d liu DB2 171 5. Trong bng Triggerred action, ch&n STATEMENT trong mc tùy ch&n For Each. Nh#p on mã ngu+n sau vào mc hành ng ca b%y: WHEN (1=1) BEGIN ATOMIC INSERT INTO saleslog (userid, daytime) VALUES (CURRENT USER, CURRENT TIMESTAMP); END (Ghi chú: on b%y s, c thc hin mt ln sau khi b%y c kích hot và kt thúc hoàn toàn. B%y theo dòng ngh'a là hot ng ca b%y s, thc hin mt khi SQL triggering tác ng vào mt dòng.) Nhp môn H qun tr c s d liu DB2 172 Kích ch&n nút OK  khi to b%y. 6. Bây gi bn nên xem li b%y ã c khi to trong tài liu Triggers  th mc Trung tâm iu khin. 7. Truy vn bng Saleslog  m bo cha có d liu trong bng này. Loi b" nhng hàng có d liu trong bng bng lnh DELETE FROM saleslog. 8. Th c#p nh#t mt bn ghi trong bng sales (Gi ý: s dng Command Editor hoc SQL Assist Wizard). 9. Kim tra li mt ln na ni dung ca bng saleslog. Xem có bao nhiêu hàng trong ó. 15.3 Hàm ngi dùng $nh ngh-a (UDF) Hàm ngi dùng nh ngh'a là mt i tng ng dng c s d liu, nó c sp xp thành b d liu nh#p và d liu xut. Ví d: mt hàm có th ly kích thc d liu vào bng inch, và tr li kt qu bng centimetes. DB2 h tr to nhng hàm s dng SQL PL, C/C++, Java, CLR (Common Language Runtime), và OLE (Object Linking and Embedding). Trong cun sách này, chúng tôi nói ch yu v hàm SQL PL bi tính n gin, ph bin và hiu sut ca chúng. Có là 4 loi hàm: hàm vô hng (Scalar Funcitons), hàm bng (Table Functions) , hàm dòng (Row Functions), và hàm ct (Column Functions). Trong bài này chúng tôi ch- t#p trung vào hàm vô hng và hàm bng. 15.3.1 Hàm vô hng Hàm vô hng tr li mt giá tr n. Nó không th cha các câu lnh SQL, các câu lnh INSERT, UPDATE và DELETE s, làm thay i trng thái ca c s d liu thì không c chp nh#n. Mt vài hàm vô hng c cài t s)n là SUM(), AVG(), DIGITS(), COALESCE(), và SUBSTR(). Nhp môn H qun tr c s d liu DB2 173 DB2 cho phép bn tùy bin xây dng hàm ngi dùng nh ngh'a, t* ó bn có th thng xuyên s dng nó theo ý ngh'a logic. Ví d, tính n s chuyn i ng dng ca bn t* Oracle sang DB2. Trong ng dng này, bn g&i hàm NVL() ca Oracle  khp ni. Hàm tng ng cài t s)n trong DB2 c g&i là COALESCE. Thay vì bn phi i tên tt c các hàm NVL trong ng dng thành COLALESCE, bn có th to mt UDF trong DB2 g&i nó là NVL, và nó s, kích hot hàm COLALESCE khi c g&i; ta s, vit hàm NLV nh di â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 trng hp này tr li i s u tiên là không rng (not NULL) Di ây là mt ví d khác ca hàm vô hng. Hàm c g&i là “deptname”, và nó tr li mã s ca phòng/ban (department) ca mt nhân viên da trên các mã (ID) ca 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 / kim tra li hàm, th li trong Command Window hoc Linux/UNIX vi lnh: db2 “values (deptname(‘000300’))” Gi hàm vô hng Hàm vô hng ca ngi dùng có th c g&i trong câu lnh SQL,  bt k âu giá tr vô hng c s dng, hoc trong mnh  liên quan n mt “Giá tr”. /ây là hai ví d biu di0n li g&i hàm vô hng COALESCE: SELECT DEPTNAME, COALESCE(MGRNO,‘ABSENT’)FROM DEPARMENT VALUES COALESCE(‘A’,‘B’) 15.3.2 Hàm bng Hàm bng tr li mt bng ca các bn ghi. Bn có th g&i chúng trong mnh  FROM ca mt truy vn. Hàm bng ngc li vi hàm vô hng là có th thay i trng thái c s d liu, bi v#y, các câu lnh INSERT, UPDATE và DELETE c chp nh#n. Mt vài hàm bng c cài t s)n là SNAPSHOT_DYN_SQL() và MQREADALL(). Hàm bng c.ng ging nh khung nhìn (view), nhng  ây nó cho phép các lnh làm thay i Nhp môn H qun tr c s d liu DB2 174 d liu (chèn, sa, xóa) mt cách mnh hn. /in hình là chúng thng tr li mt bng hoc gi li mt bn ghi kim tra. Di ây là mt ví d ca hàm bng  lit kê mt 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 / kim tra hàm trên, th li vi câu lnh sau: db2 “SELECT * FROM table(getEnumEmployee(‘D11’)) AS t” Gi hàm bng Mt hàm bng ngi dùng nh ngh'a c g&i trong mnh  FROM ca câu lnh SQL. Hàm TABLE() cn s dng và ph i có bí danh. Hình 15.2 minh h&a mt ví d ca cách g&i hàm “getEnumEmployee” mà chúng tôi ã kim tra. Hình 15.3 - L i gi mt hàm bng. Nhp môn H qun tr c s d liu DB2 175 Bài tp nhanh #11 - Khi to UDF s" dng DB2 Developer Wordbench Mc ích: DB2 Developer Workbench (DWB) là mt công c phát trin (IDE)  vit các th tc và các hàm.Trong bài t#p nhanh này, các bn s, phi to mt hàm vô hng do ngi dùng nh ngh'a trong DWB. Vic này s, em li cho bn nhiu kinh nghim hn vi DBW, tt cho vic trau d+i kin thc vi ngôn ng SQL PL  xây dng các hàm ngi dùng nh ngh'a. Quy trình thc hin: 1. M DBW ( Gi ý: có s)n trong bng ch&n Start) 2. T* ca s Data Project Explorer ch&n d án bn ã to  bài t#p nhanh trc và ch&n Open Project. 3. Kích chut phi vào th mc User-Defined Functions. Ch&n mc New. Sau ó ch&n mc SQL User-Defined Function. Bn có th ch&n mc User-Defined Function using Wizard nu cn c hng d%n trong sut quá trình s dng. 4. Trình son tho m vi hàm chính. R+i sa i mã lnh nh di â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 dng hàm bng cách kích chut phi trên hàm và ch&n Deploy. 6. Cho chy hàm bng cách kích chut vào nút Run trên thanh công c. 7. Sau khi hàm chp nh#n nh#p mt tham s vào, mt ca s thông báo hin ra yêu cu bn in giá tr cho tham s. Nh#p giá tr: 80002 Kt qu là gì? Th li vi giá tr: 1002 /iu gì xy ra lúc này? (gi ý: Nhìn vào on Messages ca Out-put view) 8. /óng DBW khi bn ã hoàn thành. Nhp môn H qun tr c s d liu DB2 176 16 Chng 16 – SQL/XML và XQuery Trong chng này chúng ta bàn v pureXML, mt công ngh mi c cung cp trong DB2 phiên bn 9  h tr vic lu tr thun XML. Nhiu ví d và khái nim c bàn lu#n trong chng này c ly t* sách " IBM: DB2 9: Tng quan và Bt u nhanh vi pureXML (IBM Redbook: DB2 9: pureXML overview and fast start). Xem phn tài nguyên  bit thêm thông tin. Hình 16.1 th hin phn kin thc trong bc tranh tng quát ca DB2 s, c  c#p trong chng này. Hình 16.1 – Bc tranh tng quát DB2: các lnh DB2, SQL/XML và XQuery 16.1 S" dng XML vi các c s d liu Các tài liu XML c lu di dng t#p tin vn bn, kho XML, hay c s d liu. Có hai nguyên nhân chính là ti sao nhiu công ty  xut lu tr XML bng c s d liu: Nhp môn H qun tr c s d liu DB2 177 • Qun lý lng ln h+ s XML là mt vn  v c s d liu. XML là d liu ging nh các d liu khác, ch- khác phn nh dng. Nhng nguyên nhân tng t  lu tr d liu quan h trên c s( d liu XML: các c s d liu cung cp chc nng tìm kim và rút trích hiu qu, h tr tính bn vng ca d liu mt cách tin c#y, sao lu và phc h+i, h tr giao dch, tính hiu qu và kh nng m rng. • Tính tích hp: bng cách lu tr các tài liu quan h và XML cùng vi nhau, bn có th tích hp d liu XML mi cùng vi d liu quan h ã có, và kt hp SQL vi XPath hay XQuery trong mt câu truy vn. Hn na, d liu quan h có th c chuyn thành XML và ngc li. Thông qua vic tích hp, các c s d liu có th h tr các ng dng web (web applications), SOA (Service Oriented Architecture) và các dch v web (web services). 16.2 C s d liu XML Có hai loi c s d liu  lu tr d liu, h+ s XML: C s d liu h tr XML C s d liu thun XML 16.2.1 c s d liu h tr XML Mt c s d liu h tr XML s, s dng mô hình quan h là mô hình chính  lu tr d liu. /iu này cn s ánh x gia mô hình d liu XML và mô hình d liu quan h, hoc là lu tr d liu XML nh là i tng ln có thuc tính. Trong khi xem xét vic này nh là công ngh c. thì nhiu nhà cung cp c s d liu v%n s dng cách nh trên. Hình 16.2 gii thích chi tit hn hai la ch&n cho c s d liu h tr XML. Hình 16.2 – Hai la chn  lu tr d liu XML trong c s d liu h tr XML Bên trái hình 16.2 cho thy phng thc lu tr tài liu XML trong c s d liu “CLOB và Varchar”. Tài liu XML dùng phng thc này c lu bng c nh CLOB và ct kiu Varchar trong c s d liu. Phng thc này không linh hot bi vì khó tìm c các phn t bên trong nh. Hiu nng ca nó c.ng không cao vì các nh XML thng rt ln do ó tn b nh. Nhiu máy ch d liu, bao g+m máy ch DB2, không ti hình nh vào b nh, mà x lý trc tip trên 'a. S dng hình nh hin nhiên s, không t hiu nng tt. [...]... 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 . da trên tài liu XML  hình 16 .9 XPath Kt 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 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 Kt 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

Ngày đăng: 08/08/2014, 20:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan