Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Rekursiiviset kyselyt DB2:ssa DB2YTR

Samankaltaiset esitykset


Esitys aiheesta: "Rekursiiviset kyselyt DB2:ssa DB2YTR"— Esityksen transkriptio:

1 Rekursiiviset kyselyt DB2:ssa DB2YTR 4.5.2010
Lauri Pietarinen Relational Consulting Oy

2 Rekursiiviset kyselyt
Käytetään CTE-rakennetta Common Table Expression DB2 LUW & z/OS V8 lähtien Sama rakenne käytössä myös SQLServer:ssä

3 Milloin tarvitaan? Hierarkiat Ketjut Verkot, hilat... Organisaatio
Tuote Jne... Ketjut Verkot, hilat... Sukulaisuussuhteet Jne jne...

4 WITH numerot(taso) AS ( SELECT 1 FROM sysibm.sysdummy1 UNION ALL SELECT taso+1 FROM numerot WHERE taso < 10 ) SELECT taso FROM numerot ORDER BY taso;

5 WITH numerot(taso, summa) AS
( SELECT 1, 1 FROM sysibm.sysdummy1 UNION ALL SELECT taso+1, summa+(taso+1) FROM numerot WHERE taso < 10 ) SELECT taso, summa FROM numerot ORDER BY taso;

6 WITH numerot(taso, lista) AS
( SELECT 1, CAST('1' AS VARCHAR(1000)) FROM sysibm.sysdummy1 UNION ALL SELECT taso+1, lista||',‘ ||STRIP(CHAR(taso+1)) FROM numerot WHERE taso < 10 ) SELECT taso, lista FROM numerot ORDER BY taso;

7 CREATE VIEW num(n) AS WITH numerot(taso) AS
( SELECT 1 FROM sysibm.sysdummy1 UNION ALL SELECT taso+1 FROM numerot WHERE taso < ) SELECT taso FROM numerot; SELECT n FROM num WHERE n <= 20;

8 CREATE TABLE demo.t1 (s1 INT);
CREATE VIEW demo.v1 AS SELECT s1 FROM demo.t1; CREATE VIEW demo.v2 AS SELECT s1 FROM demo.v1; CREATE VIEW demo.v12 AS SELECT v1.s1 FROM demo.v1 AS v1, demo.v2; SELECT bcreator, bname, dcreator, dname FROM sysibm.sysviewdep WHERE bcreator = 'DEMO';

9 nakyma_riippuvuus (omistaja, taulu, taso, polku, vomistaja, vnimi) AS
WITH nakyma_riippuvuus (omistaja, taulu, taso, polku, vomistaja, vnimi) AS ( SELECT creator, name, 1, STRIP(creator)||'.'||STRIP(name) , creator, name FROM sysibm.systables taulut WHERE creator = 'DEMO' AND type = 'T' UNION ALL SELECT nr.omistaja, nr.taulu, nr.taso + 1, polku||'->‘ ||STRIP(dcreator)||'.'||STRIP(dname), nr2.dcreator, nr2.dname FROM nakyma_riippuvuus nr, sysibm.sysviewdep nr2 WHERE nr.vomistaja = nr2.bcreator AND nr.vnimi = nr2.bname AND taso < 20 ) SELECT omistaja, taulu, taso, polku, vomistaja, vnimi FROM nakyma_riippuvuus ORDER BY taso ;

10

11 DEMO.PROJECT (sample-kannan taulu)
projektihierarkia, jossa MAJPROJ kertoo ”isäprojektin”

12 WITH PROJ_HIER (TASO, JUURI, POLKU, PROJEKTI, HTPV) AS ( SELECT 1 , PROJNO, CAST(PROJNO AS VARCHAR(1000)), PROJNO, PRSTAFF FROM PROJECT WHERE MAJPROJ IS NULL UNION ALL SELECT PH.TASO+1,PH.JUURI, PH.POLKU||'->'||LAPSI.PROJNO, LAPSI.PROJNO, LAPSI.PRSTAFF FROM PROJ_HIER PH, PROJ LAPSI WHERE PH.PROJEKTI = LAPSI.MAJPROJ AND TASO < MAX 20 TASOA ) SELECT JUURI, POLKU, PROJEKTI, TASO, SUBSTR(‘ ',1,TASO*2)||PROJEKTI AS SISENNETTY, HTPV FROM PROJ_HIER PH ORDER BY POLKU;

13

14 WITH PROJ_HIER (TASO, JUURI, POLKU, PROJEKTI, HTPV) AS ( SELECT 1 , PROJNO, CAST(PROJNO AS VARCHAR(1000)), PROJNO, PRSTAFF FROM PROJECT WHERE MAJPROJ IS NULL UNION ALL SELECT PH.TASO+1,PH.JUURI, PH.POLKU||'->'||LAPSI.PROJNO, LAPSI.PROJNO, LAPSI.PRSTAFF FROM PROJ_HIER PH, PROJ LAPSI WHERE PH.PROJEKTI = LAPSI.MAJPROJ AND TASO < MAX 20 TASOA ) SELECT JUURI, SUM(HTPV) AS KOK_HTPV FROM PROJ_HIER PH GROUP BY JUURI ORDER BY JUURI;

15

16 Lisää materiaalia 1. Recursive SQL for Dummies – B.L. “Tink” Tysor - IDUG NA Session A1 2. Recursive SQL – Unleash the Power! – Suresh Sane - IDUG EU Session E5 3. DB2 UDB for z/OS V8– Everything You Ever Wanted to Know, … and More – SG 4. DB2 UDB for z/OS Version 8 Performance Topics – SG 5. Having Fun with Complex SQL – Suresh Sane – IDUG AP Session B5 6. Parlez-Vous Klingon – Alexander Kopac – IDUG NA Session ALT 7. “Rinse, Lather, Repeat: Utilizing Recursive SQL on DB2 UDB for z/OS” – Daniel L. Luksetich – IDUG Solutions Journal May 2004


Lataa ppt "Rekursiiviset kyselyt DB2:ssa DB2YTR"

Samankaltaiset esitykset


Iklan oleh Google