MainframeSupports
tip uge 15/1999:

Der findes en lang række værktøjer og produkter, der kan unloade DB2-data til "flade" filer. En af de mest anvendte er IBM sample programmet DSNTIAUL på trods af, at det også er et af de langsomste, men som denne uges tip vil afsløre, så kan DSNTIAUL noget som de andre ikke kan.

DSNTIAUL kan nemlig fodres med et hvilket som helst SQL SELECT-kald, men det er de færreste, der er klar over det. Her følger et eksempel:

//DSNTIAUL EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSPUNCH DD DISP=SHR,DSN=MIT.LOAD.STMT
//SYSREC00 DD DISP=SHR,DSN=MIT.UNLOAD.DATA
//SYSTSIN  DD *
    DSN SYSTEM(DB2)
    RUN PROGRAM(DSNTIAUL) PARMS('SQL')
    END
/*
//SYSIN    DD *
    SELECT TBCREATOR
         , TBNAME AS TABLENAME
         , COUNT(*) AS COLUMNCOUNT
    FROM SYSIBM.SYSCOLUMNS
    WHERE TBCREATOR = SYSIBM'
    GROUP BY TBCREATOR, TBNAME
        ;
/*

Det er PARMS('SQL'), der gør forskellen. Læg også mærke til, at man ved hjælp af AS både kan omdøbe eksisterende kolonner og få navngivet kolonner, så det angivne navn kommer til at fremgå i det LOAD-statement, der genereres i MIT.LOAD.STMT. Der er ingen grænser for, hvilke SELECT-kald, DSNTIAUL kan håndtere i forhold til hvad DB2 kan. Her sætter kun din fantasi grænsen. Brug OUTER JOINS, UNIONS og meget andet. DSNTIAUL er for i øvrigt dokumenteret i DB2 installation Guide, så her kan du læse mere.

Her hos MainframeSupport synes vi, at DSNTIAUL er irriterende på et punkt: man er stort set altid nødt til at rette det genererede LOAD-statement. Derfor kan vi levere vores egen udgave, hvor man som input angiver både den tabel, man vil loade og det SELECT-statement, man vil unloade med. Skriv til os, hvis du vil høre nærmere.

Sidste uges tip        Tip oversigten