2008/07/24

REXX,ZOS] DSN CHECK

***************************** Top of Data ******************************
//LGCJDBQC JOB (WVCF3E,BP1A),'LGCJDBQ',
// CLASS=M,SCHENV=DV0A,
// MSGCLASS=Y,NOTIFY=&SYSUID
//* TLCH.MIGUF.KBSLIB(RXCHKDSN)
//REXXRUN EXEC PGM=IKJEFT01,PARM='RXCHKDSN LCE-LOAD'
//SYSEXEC DD DISP=SHR,DSN=TLCH.MIGUF.KBSLIB
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
**************************** Bottom of Data ****************************


***************************** Top of Data ******************************
/* REXX */
/* INPUT ARG PARM = LCB-UNLD */
ARG WORK_GB

DSN_CHK_HEAD = SUBSTR(WORK_GB,1,3)
DSN_CHK_MIDL = SUBSTR(WORK_GB,5,4)

IF SUBSTR(WORK_GB,3,1)="B" THEN S_COND="L.DBNAME LIKE 'LCB%'"
ELSE IF SUBSTR(WORK_GB,3,1)="E" THEN S_COND="L.DBNAME LIKE 'LCE%'"
ELSE IF SUBSTR(WORK_GB,3,1)="F" THEN S_COND="L.DBNAME LIKE 'LCF%'"
ELSE IF SUBSTR(WORK_GB,3,1)="H" THEN S_COND="L.DBNAME LIKE 'LCH%'"
ELSE DO
SAY "INVALID INPUT VALUE !!! CHECK YOUR INPUT PARAMETER~ "
EXIT(8)
END

CALL GET_OBJ_LIST

EXIT
/* ------------------------------------------------------------- */
GET_OBJ_LIST:

IDX = 0
DROP IDBNAME.
DROP ITBNAME.
DROP IPARTCNT.
DROP ILOADTYPE.

"SUBCOM DSNREXX"
IF RC THEN S_RC = RXSUBCOM('ADD','DSNREXX','DSNREXX')
ADDRESS DSNREXX "CONNECT" DV0A

SEL_STMT = "SELECT L.DBNAME,L.TBNAME,TS.PARTITIONS ",
" ,L.LOAD_TYPE ",
" FROM SYSIBM.SYSTABLESPACE TS,CDBD2D20.TD2L0 L ",
" WHERE (L.NUM_CONV=6 AND ",
S_COND || ")",
" AND (TS.DBNAME=L.DBNAME AND TS.NAME=L.TBNAME) ",
" ORDER BY 1,2 ",
" WITH UR "

ADDRESS DSNREXX "EXECSQL DECLARE C1 CURSOR WITH HOLD FOR S1"
IF SQLCODE = 0 THEN
ADDRESS DSNREXX "EXECSQL PREPARE S1 FROM :SEL_STMT"
IF SQLCODE = 0 THEN
ADDRESS DSNREXX "EXECSQL OPEN C1"
IF SQLCODE = 100 THEN DO
ADDRESS DSNREXX "EXECSQL CLOSE C1"
'THERE IS NO TABLES USING ' || S_BP || ' BPOOL. '
EXIT(4)
END
ELSE
DO FOREVER
ADDRESS DSNREXX "EXECSQL FETCH C1 INTO :DB_NAME ",
" ,:TB_NAME ",
" ,:PART_CNT ",
" ,:LOAD_TYPE "
IF SQLCODE = 0 THEN DO
/*
IDX = IDX + 1
IDBNAME.IDX = DB_NAME
ITBNAME.IDX = TB_NAME
IPARTCNT.IDX = PART_CNT
ILOADTYPE.IDX = LOAD_TYPE
*/
CALL DSN_CHECK
END
ELSE IF SQLCODE = 100 THEN DO
/*
IDBNAME.0 = IDX
ITBNAME.0 = IDX
IPARTCNT.0 = IDX
ILOADTYPE.0 = IDX
*/
ADDRESS DSNREXX "EXECSQL CLOSE C1"
LEAVE
END
ELSE DO
SAY " FETCH SQLCODE : " SQLCODE
SAY " FETCH SQLERRMC : " SQLERRMC
EXIT(8)
END
END
RETURN
/* -------------- */
DSN_CHECK:

I = 1

IF DSN_CHK_MIDL = "UNLD" & PART_CNT = 0 THEN DO
CHK_DSN = "'S"||DSN_CHK_HEAD||".MIGUF."||TB_NAME||"."||,
DSN_CHK_MIDL||".P000'"
SAY SUBSTR(CHK_DSN,2,26) LISTDSI(CHK_DSN)
END

ELSE IF DSN_CHK_MIDL = "UNLD" & PART_CNT > 0 THEN
DO I=1 TO PART_CNT BY 1
PART_NUM = TRANSLATE(FORMAT(I,3),'0',' ')
CHK_DSN = "'S"||DSN_CHK_HEAD||".MIGUF."||TB_NAME||"."||,
DSN_CHK_MIDL||".P"||PART_NUM||"'"
SAY SUBSTR(CHK_DSN,2,26) LISTDSI(CHK_DSN)
END

ELSE IF DSN_CHK_MIDL = "LOAD" & PART_CNT = 0 THEN DO
SELECT
WHEN LOAD_TYPE = "Y" | LOAD_TYPE = "E" THEN DO
CHK_DSN = "'Q"||DSN_CHK_HEAD||".MIGUF."||TB_NAME||"."||,
DSN_CHK_MIDL||".P000'"
SAY SUBSTR(CHK_DSN,2,26) LISTDSI(CHK_DSN)
END
WHEN LOAD_TYPE = "S" THEN DO
CHK_DSN = "'S"||DSN_CHK_HEAD||".MIGUF."||TB_NAME||"."||,
"UNLD.P000'"
SAY SUBSTR(CHK_DSN,2,26) LISTDSI(CHK_DSN)
END
OTHERWISE NOP
END
END

ELSE IF DSN_CHK_MIDL = "LOAD" & PART_CNT > 0 THEN DO
SELECT
WHEN LOAD_TYPE = "Y" | LOAD_TYPE = "E" THEN
DO I=1 TO PART_CNT BY 1
PART_NUM = TRANSLATE(FORMAT(I,3),'0',' ')
CHK_DSN = "'Q"||DSN_CHK_HEAD||".MIGUF."||TB_NAME||"."||,
DSN_CHK_MIDL||".P"||PART_NUM||"'"
SAY SUBSTR(CHK_DSN,2,26) LISTDSI(CHK_DSN)
END
WHEN LOAD_TYPE = "S" THEN
DO I=1 TO PART_CNT BY 1
PART_NUM = TRANSLATE(FORMAT(I,3),'0',' ')
CHK_DSN = "'S"||DSN_CHK_HEAD||".MIGUF."||TB_NAME||"."||,
"UNLD.P"||PART_NUM||"'"
SAY SUBSTR(CHK_DSN,2,26) LISTDSI(CHK_DSN)
END
OTHERWISE NOP
END
END

ELSE DO
SAY "COULD YOU CHECK YOUR INTPUT >> "DSN_CHK_MIDL" & " PART_CNT
END

RETURN
**************************** Bottom of Data ****************************

댓글 없음: