1. Trang chủ
  2. » Công Nghệ Thông Tin

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

21 367 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 1,15 MB

Nội dung

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

w