Example 13 — Using Db2 dynamic SQL (DIRECT NO) and Db2 parallelism
This example illustrates using Db2 dynamic SQL and parallelism to unload data from multiple tables.
This job unloads multiple tables from the same table space into three different SYSREC output files.
- The first SELECT statement shows a subselect query against two tables.
- The second SELECT statement joins two tables on the EMPL_LNAME column of the two tables.
- The third SELECT statement shows an example of column functions against a single table.
Message 50041I indicates the status of zIIP processing. For this example, the ZIIP installation option is ENABLED, but an XBM subsystem was not specified. UNLOAD PLUS automatically located an available XBM subsystem to provide zIIP processing.
The following table describes the key command options for this job:
Command options used in JCL | Description |
---|---|
DIRECT NO | Tells UNLOAD PLUS to use Db2 dynamic SQL to process the SELECT statements and read the table data Using DIRECT NO allows you to unload data by using the full range of functionality that the Db2 SQL SELECT statement provides. This example illustrates the use of several SQL functions that are not available when you specify DIRECT YES. |
CNTLCARDS DB2 | Writes Db2 CREATE TABLE DDL and Db2 LOAD control statements to the SYSCNTL data set |
CURRENTDEGREE | Tells UNLOAD PLUS to issue the SET CURRENT DEGREE command before executing your dynamically executed SELECT statements This option allows Db2 to take advantage of parallelism where parallel processing is possible. |
UNLOADDN SYSREC ACTIVE NO | Disables dynamic allocation for the primary unload data set, overriding the default in the installation options module |
SELECT | Names the columns to unload |
FROM | Names the table to unload |
The following figure shows the JCL for example 13:
//UNLOAD13 EXEC PGM=ADUUMAIN,REGION=0M,
// PARM=(DEHJ,'ADUXM13','NEW ',,'MSGLEVEL(1)')
//*********************************************************************
//STEPLIB DD DISP=SHR,DSN=<product.libraries>
// DD DISP=SHR,DSN=DB2.DSNEXIT
// DD DISP=SHR,DSN=DB2.DSNLOAD
//SYSIN DD *
UNLOAD
DIRECT NO
CNTLCARDS DB2
CURRENTDEGREE ANY
UNLOADDN SYSREC ACTIVE NO
*
SELECT EMPL_LNAME,
MAX(EMPL_SALARY)
FROM BMC.SAL_EMPLS A
GROUP BY EMPL_LNAME
HAVING MAX(EMPL_SALARY) = (SELECT MAX(EMPL_SALARY_HRLY)
FROM BMC.RET_EMPLS
WHERE EMPL_LNAME= A.EMPL_LNAME);
*
SELECT DISTINCT BMC.EMPLS.EMPL_LNAME,
SSN,
EMPL_ID
FROM BMC.EMPLS INNER JOIN BMC.RET_EMPLS
ON BMC.EMPLS.EMPL_LNAME = BMC.RET_EMPLS.EMPL_LNAME;
*
SELECT EMPL_DEPT_NO,
MAX(EMPL_HRLY_RATE),
MIN(EMPL_HRLY_RATE)
FROM BMC.HRLY_EMPLS
GROUP BY EMPL_DEPT_NO;
*
/*
//SYSCNTL DD DSN=ADU.EXAMPL13.SYSCNTL,DISP=(NEW,CATLG),
// UNIT=SYSDA,SPACE=(CYL,(3,1),RLSE)
//SYSREC01 DD DSN=ADU.EXAMPL13.SYSREC01,DISP=(NEW,CATLG),
// UNIT=SYSDA,SPACE=(CYL,(3,1),RLSE)
//SYSREC02 DD DSN=ADU.EXAMPL13.SYSREC02,DISP=(NEW,CATLG),
// UNIT=SYSDA,SPACE=(CYL,(3,1),RLSE)
//SYSREC03 DD DSN=ADU.EXAMPL13.SYSREC03,DISP=(NEW,CATLG),
// UNIT=SYSDA,SPACE=(CYL,(3,1),RLSE)
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
SYSPRINT for example 13
The following figure shows the SYSPRINT for example 13:
(C) COPYRIGHT 1991 - 2013 BMC SOFTWARE, INC.
BMC50001I UTILITY EXECUTION STARTING 10/28/2013 13:08:17 ...
BMC50002I UTILITY ID = 'ADUXM13'. DB2 SUBSYSTEM ID = 'DEHJ'. OPTION MODULE = 'ADU$OPTS'.
BMC50471I z/OS 2.1.0,PID=HBB7790,DFSMS FOR Z/OS=2.1.0,DB2=11.1.0
BMC50471I REGION=0M,BELOW 16M=8848K,ABOVE 16M=1413172K,IEFUSI=NO,CPUS=3
BMC50471I MEMLIMIT=17592186040320M,AVAILABLE=17592186040311M,MEMLIMIT SET BY:REGION=0
BMC50471I UNLOAD PLUS FOR DB2--V11.01.00
BMC50471I NO MAINTENANCE TO REPORT
BMC50471I DB2 UTILITIES COMMON CODE--V11.01.00
BMC50471I NO MAINTENANCE TO REPORT
BMC50471I SOLUTION COMMON CODE--V11.01.00
BMC50471I MAINT: BPJ0661 BPJ0667 BPJ0671 BPJ0674 BPJ0675 BPJ0676 BPJ0682 BPJ0686 BPJ0689 BPJ0697
BMC50471I BMCSORT ENGINE--V02.04.01
BMC50471I MAINT: BPJ0691
BMC50471I BMC STATS API--V11.01.00
BMC50471I MAINT: BPU5409 BPU5534 BPU5674
BMC50471I EXTENDED BUFFER MANAGER--V06.01.00
BMC50471I MAINT: BPE0401 BPE0403 BPE0405 BPE0407 BPE0410 BPE0412 BPE0416
BMC50471I ANALYZE=(DB2STATS,NOLIMIT) FORCE_RPT=NO SMAX=16
BMC50471I CENTURY=(1950,2049) FORCE=NONE SMCORE=(0K,0K)
BMC50471I CHANGE_CONSISTENT=NO HISTORY=YES SORTNUM=32
BMC50471I CHANGE_QUIESCE=NO IBUFFS=25 SQLDELAY=3
BMC50471I CMAX=16 INLINE=NO SQLRETRY=100
BMC50471I CMRATIO=50 LOADDECP=NO TAPEDISP=DELETE
BMC50471I CONSTRULES=BMC LOCKROW=YES TASKMAX=200%
BMC50471I CURRENTDEGREE=NONE MAXP=5 UBUFFS=25
BMC50471I DELFILES=YES MSGLEVEL=1 UNLDMAX=200%
BMC50471I DRNDELAY=1 NULLCHAR=X'6F' UNLOADDN_ACTIVE=(YES,NO)
BMC50471I DRNRETRY=255 NULLTYPE=T1 UNLOADDN=(SYSREC,SYSRED)
BMC50471I DRNWAIT=NONE OPNDB2ID=YES USELRECL=NO
BMC50471I DSPLOCKS=DRNFAIL PLAN=ADUQA UXSTATE=SUP
BMC50471I EXCLDUMP=(X37,X22,X06) RECFM=AUTO WORKUNIT=SYSALLDA
BMC50471I FILEREFDN=SYSREF ROWSETSZ=100 ZIIP=ENABLED
BMC50471I FILL=NO SDUMP=YES ZONEDDECOVP=(C,D)
BMC50471I FORCE_AT=(START,3) SHRLEVEL=REFERENCE
BMC50471I TAPES=NONE
BMC50470I OUTPUT = SYSREC SYSRED SYSREF
BMC50470I UNIT = SYSALLDA SYSALLDA SYSALLDA
BMC50470I VOLCNT = 25 25 25
BMC50470I GDGLIMIT = 5 5 5
BMC50470I GDGEMPTY = NO NO NO
BMC50470I GDGSCRAT = NO NO NO
BMC50470I STORCLAS = NONE NONE NONE
BMC50470I DATACLAS = NONE NONE NONE
BMC50470I MGMTCLAS = NONE NONE NONE
BMC50470I UNITCNT = 0 0 0
BMC50470I SPACE = CYL CYL CYL
BMC50470I PCTPRIM = AUTO AUTO AUTO
BMC50470I MAXPRIM = 0 0 0
BMC50470I MAXSECD = 0 0 0
BMC50470I FILESZPCT 100 100 100
BMC50470I NBRSECD = AUTO AUTO AUTO
BMC50470I DISKRETN = NONE NONE NONE
BMC50470I DISKEXPD = NONE NONE NONE
BMC50470I RETPD = NONE NONE NONE
BMC50470I EXPDT = 99000 99000 99000
BMC50470I TRTCH = NONE NONE NONE
BMC50470I DSNTYPE = NONE NONE PDS
BMC50483I SYSREC VOLUMES=NONE
BMC50483I SYSRED VOLUMES=NONE
BMC50483I SYSREF VOLUMES=NONE
BMC50483I SYSREC DSNAME=&USERID.&TYPE.S&SELNUM
BMC50483I SYSRED DSNAME=&USERID.&TYPE.S&SELNUM
BMC50483I SYSREF DSNAME=&USERID.BMC
BMC50471I DB2 DSNHDECP MODULE SETTINGS:
BMC50471I VERSION = 1110
BMC50471I SUBSYSTEM DEFAULT = DEHJ
BMC50471I CHARACTER SET = ALPHANUM
BMC50471I DATE FORMAT = USA
BMC50471I TIME FORMAT = USA
BMC50471I LOCAL DATE LENGTH = 0
BMC50471I LOCAL TIME LENGTH = 0
BMC50471I DECIMAL POINT = PERIOD
BMC50471I DECIMAL ARITHMETIC = 15
BMC50471I DELIMITER = DEFAULT
BMC50471I SQL DELIMITER = DEFAULT
BMC50471I ENCODING SCHEME = EBCDIC
BMC50471I APPL. ENCODING SCHEME = EBCDIC
BMC50471I MIXED = NO
BMC50471I EBCDIC CCSID = (37,65534,65534)
BMC50471I ASCII CCSID = (819,65534,65534)
BMC50471I UNICODE CCSID = (367,1208,1200)
BMC50471I IMPLICIT TIME ZONE = CURRENT (-05:00)
BMC50028I DB2 MODE = NFM
BMC50471I BMC_BMCUTIL ='BMCUTIL.CMN_BMCUTIL'
BMC50471I BMC_BMCSYNC ='BMCUTIL.CMN_BMCSYNC'
BMC50471I BMC_BMCHIST ='BMCUTIL.CMN_BMCHIST'
BMC50471I BMC_BMCXCOPY ='BMCUTIL.CMN_BMCXCOPY'
BMC50102I UNLOAD
BMC50102I DIRECT NO
BMC50102I CNTLCARDS DB2
BMC50102I CURRENTDEGREE ANY
BMC50102I UNLOADDN SYSREC ACTIVE NO
BMC50102I *
BMC50102I SELECT EMPL_LNAME,
BMC50102I MAX(EMPL_SALARY)
BMC50102I FROM BMC.SAL_EMPLS A
BMC50102I GROUP BY EMPL_LNAME
BMC50102I HAVING MAX(EMPL_SALARY) = (SELECT MAX(EMPL_SALARY_HRLY)
BMC50102I FROM BMC.RET_EMPLS
BMC50102I WHERE EMPL_LNAME= A.EMPL_LNAME);
BMC50102I *
BMC50102I SELECT DISTINCT BMC.EMPLS.EMPL_LNAME,
BMC50102I SSN,
BMC50102I EMPL_ID
BMC50102I FROM BMC.EMPLS INNER JOIN BMC.RET_EMPLS
BMC50102I ON BMC.EMPLS.EMPL_LNAME = BMC.RET_EMPLS.EMPL_LNAME;
BMC50102I *
BMC50102I SELECT EMPL_DEPT_NO,
BMC50102I MAX(EMPL_HRLY_RATE),
BMC50102I MIN(EMPL_HRLY_RATE)
BMC50102I FROM BMC.HRLY_EMPLS
BMC50102I GROUP BY EMPL_DEPT_NO;
BMC50102I *
BMC51654I DIRECT NO IN EFFECT
BMC50109I 'DIRECT NO' OPTION SPECIFIED. OPTION 'SHRLEVEL' IGNORED
BMC51689I ESTIMATED ROWS FOR SELECT 1 IS 0
BMC51689I ESTIMATED ROWS FOR SELECT 2 IS 0
BMC51689I ESTIMATED ROWS FOR SELECT 3 IS 0
BMC50004I UTILINIT PHASE COMPLETE. ELAPSED TIME = 00:00:00
BMC51639I FOR DDNAME 'SYSREC01' DSN=ADU.EXAMPL13.SYSREC01,DCB=(RECFM=VB,BLKSIZE=27993,LRECL=27)
BMC51639I FOR DDNAME 'SYSREC02' DSN=ADU.EXAMPL13.SYSREC02,DCB=(RECFM=VB,BLKSIZE=27993,LRECL=33)
BMC51639I FOR DDNAME 'SYSREC03' DSN=ADU.EXAMPL13.SYSREC03,DCB=(RECFM=FB,BLKSIZE=27984,LRECL=16)
BMC50041I 0: ZIIP ENABLED (0) USING XBM SUBSYSTEM XBMB
BMC50474I BELOW 16M = 8492K, ABOVE 16M = 1405468K, CPUS = 3
BMC51702I MAX TASKS = 3
BMC51664I 3: SELECT STATEMENT NO. 3, ROWS = 10
BMC51664I 2: SELECT STATEMENT NO. 2, ROWS = 20
BMC51664I 1: SELECT STATEMENT NO. 1, ROWS = 8
BMC50476I DDNAME = SYSREC01, I/OS = 1, I/O WAITS = 1, RDB LOCK WAITS = 0
BMC50476I DDNAME = SYSREC02, I/OS = 1, I/O WAITS = 1, RDB LOCK WAITS = 0
BMC50476I DDNAME = SYSREC03, I/OS = 1, I/O WAITS = 1, RDB LOCK WAITS = 0
BMC51676I UNLOAD STATISTICS: 8 ROWS PROCESSED FOR SELECT STATEMENT NO. 1, 0 DISCARDED
BMC51676I UNLOAD STATISTICS: 20 ROWS PROCESSED FOR SELECT STATEMENT NO. 2, 0 DISCARDED
BMC51676I UNLOAD STATISTICS: 10 ROWS PROCESSED FOR SELECT STATEMENT NO. 3, 0 DISCARDED
BMC51674I UNLOAD STATISTICS: 8 RECORDS WRITTEN TO DDNAME 'SYSREC01'
BMC51674I UNLOAD STATISTICS: 20 RECORDS WRITTEN TO DDNAME 'SYSREC02'
BMC51674I UNLOAD STATISTICS: 10 RECORDS WRITTEN TO DDNAME 'SYSREC03'
BMC51675I UNLOAD STATISTICS: 0 RECORDS DISCARDED DUE TO ERRORS
BMC50041I 0: ZIIP NOT ENABLED (0) USING XBM SUBSYSTEM XBMB
BMC50004I UNLOAD PHASE COMPLETE. ELAPSED TIME = 00:00:00
BMC51639I FOR DDNAME 'SYSCNTL' DSN=ADU.EXAMPL13.SYSCNTL,DCB=(RECFM=FB,BLKSIZE=3120,LRECL=80)
BMC51801I DB2 CREATE TABLE AND LOAD TABLE STATEMENTS WRITTEN TO DDNAME 'SYSCNTL'
BMC51805I CREATE TABLE
BMC51809I RDAMZL.$TABLE1
BMC51807I ( EMPL_LNAME VARCHAR(15) NOT NULL
BMC51808I , $COLUMN2 DECIMAL(9 , 2)
BMC51809I )
BMC51809I ;
BMC51805I CREATE TABLE
BMC51809I RDAMZL.$TABLE2
BMC51807I ( EMPL_LNAME VARCHAR(15) NOT NULL
BMC51807I , SSN CHARACTER(9) NOT NULL
BMC51808I , EMPL_ID DECIMAL(5 , 0) NOT NULL
BMC51809I )
BMC51809I ;
BMC51805I CREATE TABLE
BMC51809I RDAMZL.$TABLE3
BMC51807I ( EMPL_DEPT_NO CHARACTER(4) NOT NULL
BMC51808I , $COLUMN2 DECIMAL(9 , 2)
BMC51808I , $COLUMN3 DECIMAL(9 , 2)
BMC51809I )
BMC51809I ;
BMC51810I LOAD DATA INDDN SYSREC01
BMC51940I EBCDIC CCSID(37,65534,65534)
BMC51811I INTO TABLE
BMC51809I RDAMZL.$TABLE1
BMC51813I (EMPL_LNAME POSITION(1:*) VARCHAR
BMC51813I ,$COLUMN2 POSITION(*:*+4) DECIMAL
BMC51814I NULLIF BMC_NULL1=X'6F'
BMC51819I , BMC_NULL1 POSITION(*) CHAR(1)
BMC51809I )
BMC51810I LOAD DATA INDDN SYSREC02
BMC51940I EBCDIC CCSID(37,65534,65534)
BMC51811I INTO TABLE
BMC51809I RDAMZL.$TABLE2
BMC51813I (EMPL_LNAME POSITION(1:*) VARCHAR
BMC51815I ,SSN POSITION(*:*+8) CHAR (9)
BMC51813I ,EMPL_ID POSITION(*:*+2) DECIMAL
BMC51809I )
BMC51810I LOAD DATA INDDN SYSREC03
BMC51940I EBCDIC CCSID(37,65534,65534)
BMC51811I INTO TABLE
BMC51809I RDAMZL.$TABLE3
BMC51815I (EMPL_DEPT_NO POSITION(1:4) CHAR (4)
BMC51813I ,$COLUMN2 POSITION(5:9) DECIMAL
BMC51814I NULLIF BMC_NULL1=X'6F'
BMC51819I , BMC_NULL1 POSITION(10) CHAR(1)
BMC51813I ,$COLUMN3 POSITION(11:15) DECIMAL
BMC51814I NULLIF BMC_NULL2=X'6F'
BMC51819I , BMC_NULL2 POSITION(16) CHAR(1)
BMC51809I )
BMC50476I DDNAME = SYSCNTL, I/OS = 1, I/O WAITS = 1, RDB LOCK WAITS = 0
BMC50006I UTILITY EXECUTION COMPLETE, RETURN CODE = 0
Related topic