Return to Mainframe Utilities Page
Module
/**********************************************************************
/* UTILITY: INDEXCOL *
/* AUTHOR: DAVID LEIGH *
/* FUNCTION: THIS UTILITY PROMPTS FOR INPUT OF A DB2 INDEX NAME AND AN*
/* ASSOCIATED CREATOR ID. I THEN DETERMINES THE LENGTH OF *
/* THE INDEX. *
/**********************************************************************
PROC 0 CREATOR(USSTRD00) +
UTILITY(INDEXCOL) +
HELP +
DEBUG
/*** CHECK THE DEBUG SWITCH ***/
IF &DEBUG = DEBUG THEN +
CONTROL MSG LIST CONLIST SYMLIST NOFLUSH NOPROMPT ASIS
ELSE +
CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS
IF &HELP = HELP THEN GOTO HELPSEC
02
/**********************************************************************
/* GET THE USER'S FULL NAME *
/**********************************************************************
SET SYSOUTTRAP = 1000
ACF
LIST *
END
SET SYSOUTTRAP = 0
SET SYSDVAL = &STR(&SYSNSUB(1,&SYSOUTLINE1))
READDVAL A B NAME1 NAME2 NAME3 NAME4 NAME5
SET FULLNAME = &STR(&NAME1 &NAME2 &NAME3 &NAME4 &NAME5)
02
/**********************************************************************
/* ESTABLISH SOME PROCESSING VARIABLES *
/**********************************************************************
SET DB2FILE = &STR(&SYSUID..TEMP.INDEXCOL.WORK)
SET SCANALL = ALL
SET ZTDMARK = &STR(**** ALL ROWS SHOWN ****)
SET LP = &STR((
SET RP = &STR()
/**********************************************************************
/* GET A LIST OF INDEXES FOR THE CURRENT CREATOR *
/**********************************************************************
INDEX_LIST: +
SET SCREATOR = &STR(&CREATOR)
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** EXTRACTING A LIST OF INDEXES FOR CREATOR +
"&CREATOR" FROM DB2 ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)
FREE DD(SYSREC00 SYSIN SYSPRINT SYSPUNCH)
IF &DEBUG = DEBUG THEN +
DO
ALLOC DD(SYSPRINT) DA(*)
ALLOC DD(SYSPUNCH) DA(*)
END
ELSE +
DO
ALLOC DD(SYSPRINT) DUMMY
ALLOC DD(SYSPUNCH) DUMMY
END
DELETE '&DB2FILE'
ALLOC DD(SYSREC00) DSN('&DB2FILE') +
NEW CATALOG +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) TRACKS RELEASE DSORG(PS)
ALLOC DD(SYSIN) +
NEW +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) TRACKS RELEASE +
RECFM(F B) LRECL(80) BLKSIZE(23440) DSORG(PS)
OPENFILE SYSIN OUTPUT
SET SYSIN = &STR(SYSADM2.INDEXCOL WHERE C LIKE '&CREATOR')
PUTFILE SYSIN
CLOSFILE SYSIN
DSN SYSTEM(DSNT)
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) -
LIB('SYS4.DSN.DSNT.RUNLIB.LOAD')
END
FREE DD(SYSREC00 SYSIN SYSPRINT SYSPUNCH)
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** LOADING THE LIST INTO AN ISPF TABLE ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)
ISPEXEC EDIT DATASET('&DB2FILE') MACRO(INDEXCM1)
/**********************************************************************
/* DISPLAY THE PANEL IF NO INPUT WAS PASSED *
/**********************************************************************
REDISPLAY: +
ISPEXEC TBDISPL TEMPNDXC PANEL(INDEXCOL)
IF &LASTCC > 7 THEN +
GOTO FINISH
ELSE +
IF &STR(&SCREATOR) ¬= &STR(&CREATOR) THEN GOTO INDEX_LIST
/**********************************************************************
/* PROCESS ANY SELECTED ROWS *
/**********************************************************************
IF &ZTDSELS ¬= &STR(0000) THEN +
DO
ISPEXEC CONTROL DISPLAY SAVE
DO WHILE &ZTDSELS ¬= &STR(0000)
SELECT (&STR(&SEL))
/************ EXCLUDE THIS LINE ************/
WHEN (X) DO
SET SEL = X
SET SCANALL = SCAN
ISPEXEC TBMOD TEMPNDXC
ISPEXEC TBVCLEAR TEMPNDXC
SET SEL = X
ISPEXEC TBSARG TEMPNDXC NAMECOND(SEL NE)
SET ZTDMARK = &STR(**** ROW(S) EXCLUDED ****)
END
OTHERWISE DO
SET SEL =
ISPEXEC TBMOD TEMPNDXC
SET ZEDSMSG =
SET ZEDLMSG = &STR("X" IS THE ONLY +
VALID LINE COMMAND)
ISPEXEC SETMSG MSG(UTLZ001)
END
END
NEXT_LINE: IF &ZTDSELS > &STR(0001) THEN +
DO
ISPEXEC CONTROL DISPLAY RESTORE
ISPEXEC TBDISPL TEMPNDXC
ISPEXEC CONTROL DISPLAY SAVE
END
ELSE +
DO
SET ZTDSELS = &STR(0000)
ISPEXEC CONTROL DISPLAY RESTORE
IF &STR(&ZCMD) > THEN GOTO SCROLL
END
END
END
/******************************/
/* PROCESS "PRIMARY" COMMANDS */
/******************************/
IF &STR(&ZCMD) = THEN GOTO SCROLL
SET SYSDVAL = &STR(&ZCMD)
READDVAL ZCMD OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 OPT7 OPT8 OPT9 OPT10
SELECT (&ZCMD)
WHEN (DEBUG) DO
IF &OPT1 = &STR(ON) THEN +
DO
SET DEBUG = DEBUG
SET ZEDSMSG = &STR(DEBUG ON)
SET ZEDLMSG = &STR(THE DEBUG SWITCH HAS BEEN SET ON)
ISPEXEC SETMSG MSG(UTLZ000)
CONTROL MSG LIST CONLIST SYMLIST NOFLUSH NOPROMPT ASIS
SET ZCMD =
GOTO SCROLL
END
IF &OPT1 = &STR(OFF) THEN +
DO
SET DEBUG = DEBUG
SET ZEDSMSG = &STR(DEBUG OFF)
SET ZEDLMSG = &STR(THE DEBUG SWITCH HAS BEEN SET OFF)
ISPEXEC SETMSG MSG(UTLZ000)
CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS
SET ZCMD =
GOTO SCROLL
END
END
WHEN (E ¦ ED ¦ EDI ¦ EDIT) ISPEXEC EDIT DATASET('&DB2FILE')
WHEN (F ¦ FI ¦ FIN ¦ FIND) DO
SET ZEDSMSG = &STR("&OPT1" NOT FOUND)
SET ZEDLMSG = &STR(THE STRING "&OPT1" WAS NOT FOUND)
ISPEXEC SETMSG MSG(UTLZ001)
ISPEXEC TBTOP TEMPNDXC
ISPEXEC TBSKIP TEMPNDXC
DO WHILE &LASTCC = 0
IF &SYSINDEX(&SYSCAPS(&STR(&OPT1)),&STR(&INDEX)) > 0 +
THEN DO
SET ZEDSMSG = &STR("&OPT1" FOUND)
SET ZEDLMSG = &STR(THE STRING "&OPT1" WAS FOUND)
ISPEXEC SETMSG MSG(UTLZ000)
IF &STR(&SEL) = X THEN +
DO
SET SEL =
ISPEXEC TBMOD TEMPNDXC
END
GOTO FIND_CONTINUE
END
ISPEXEC TBSKIP TEMPNDXC
END
FIND_CONTINUE: +
END
WHEN (R ¦ RE ¦ RES ¦ RESE ¦ RESET) DO
SET SCANALL = ALL
SET ZEDSMSG =
SET ZEDLMSG = &STR(ALL ROWS SHOWN)
ISPEXEC SETMSG MSG(UTLZ000)
ISPEXEC TBTOP TEMPNDXC
ISPEXEC TBVCLEAR TEMPNDXC
SET SEL = X
ISPEXEC TBSARG TEMPNDXC NAMECOND(SEL EQ)
ISPEXEC TBSCAN TEMPNDXC
DO WHILE &LASTCC = 0
SET SEL =
ISPEXEC TBMOD TEMPNDXC
SET SEL = X
ISPEXEC TBSCAN TEMPNDXC
END
ISPEXEC TBTOP TEMPNDXC
ISPEXEC TBVCLEAR TEMPNDXC
SET ZTDMARK = &STR(**** ALL ROWS SHOWN ****)
GOTO SCROLL
END
OTHERWISE DO
SET ZEDLMSG = &STR(VALID PRIMARY COMMANDS: +
"EDIT", +
"FIND", +
"DEBUG ON¦OFF", +
"RESET")
ISPEXEC SETMSG MSG(UTLZ001)
END
END
/*****************************/
/* MAINTAIN THE TOP OF TABLE */
/*****************************/
SCROLL: +
IF &STR(&ZCMD) = THEN +
DO
ISPEXEC TBTOP TEMPNDXC
ISPEXEC TBSKIP TEMPNDXC NUMBER(&ZTDTOP)
ISPEXEC VGET (ZVERB ZSCROLLN)
IF &ZVERB = &STR(UP) THEN +
ISPEXEC TBSKIP TEMPNDXC NUMBER(-&ZSCROLLN)
IF &ZVERB = &STR(DOWN) THEN +
ISPEXEC TBSKIP TEMPNDXC NUMBER(&ZSCROLLN)
END
GOTO REDISPLAY
/**********************************************************************
/* GET OUT NOW *
/**********************************************************************
FINISH: EXIT
Documentation
INDEXCOL accesses the DB2 catalog to determine all the columns in all the
indexes for a given creator id. It then adds up the bytes in each index and
loads the results into an ISPF table and displays them in a scrolling panel.
At the time of this writing no tool gives this information though it can be
useful when doing catalog statistics updates for EXPLAIN "what-iffing" with
Candle's !DB-Explain product.
Syntax:
COMMAND ===> tso indexcol {creator(creatorid)}
The default creator id is "USSTRD00" (UNISTAR development).
When the list is presented on your screen you have a few primary commands and
one line command to choose from.
Line command:
"X" - This command on any line will exclude that line from the current display.
This may be useful if you are wanting to keep a display of multiple index
lengths on one screen but there are many screens worth of lines which you do
not want to see.
Primary Commands:
"DEBUG ON³OFF" - This dynamically turns on or off debugging messages while
INDEXCOL is executing.
"EDIT" - This command will bring you into an edit session on the work file
which INDEXCOL created while preparing the scrollable list screen. It
contains all the individual columns, their length, and sequence, and
total length in one big file. This may be useful to see the details
for a given index.
"FIND xxx" - This command will position your display to the first line where a
given string is found. It is a good tool to position you to a
particular set of indexes for a particular table since the index
names all begin with the subject area prefix.
"RESET" - This command will reset all the excluded lines (if there are any) so
that all lines are displayed again.

0 Comments