zOs/REXX/ELARDDL0
$#:
* WS2/3 Script fuer Jobs fuer ElarDDL
*
*
lib = XB.ELAR.INFRA.FAM.NDBS.FINAL
gen = DSN.ELAR.GENDDL
creDb = 0 $** create databases if missing
$** nur mit WS3 |||||||||
checkSql = DSN.DBX.XB.SQL(#ELARDDL)
dbSys = DEVG
jn = XBDDLJOB
rxLib = ORG.U0009.B0106.KIDI63.EXEC
* @splitCheckDDL
dbEx = 1
$#@
if $creDb then $@[
call sqlConnect $dbSys
call sqlQueryPrep 7, "select name from sysibm.sysDatabase" ,
"where name = ?"
$]
$;
$>.fEdit($-gen'(DDLJOB) ::f')
lmmId = lmmBegin($lib)
$do mx=1 to 9999 $@[
mbr = lmmNext(lmmId)
if mbr = '' then
leave
call readDsn "'"$lib"("mbr")'", i.
db = ''
cnt = 0
do ix=1 to i.0
li = translate(i.ix)
if wordPos('IN', li) > 0 then do
nd = word(li, wordPos('IN', li) + 1)
nd = word(translate(nd, ' ', '.'), 1)
if nd = '' then
call 'err' mbr ix 'bad in:' i.ix
if db = '' then
db = nd
else if db \== nd then
call err 'db was' db 'but now' nd 'in' mbr ix':'i.ix
cnt = cnt + 1
end
if wordPos('DROP', li) > 0 then do
if abbrev(li, '--') then nop
else if subWord(li, wordPos('DROP', li)-2, 2) ,
== 'RESTRICT ON' then nop
else
call err 'drop in' mbr ix':'i.ix
end
end
if db = '' then
call err 'no db found in' mbr
if mx // 20 = 0 then
say mx mbr 'db' db 'cnt' cnt
$=mbr=- mbr
$=db =- db
if $creDb then $@[
call sqlQueryArgs 7, db
$=dbEx =- sqlFetch(7, ee)
call sqlClose 7
$=mx =- right(mx, 4, 0)
$]
if mx // 50 = 1 then $@=/jc/
//$jn JOB (CP00,KE50),'DB2 ELARDDL',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M,SCHENV=DB2
//*MAIN CLASS=LOG
$/jc/
$@=/jcl/
//******** $mx db=$db mbr=$mbr *************************
$*(
// IF RC=0 THEN
//S${mx}CHB EXEC PGM=IKJEFT01,DYNAMNBR=200,TIME=99
//SYSTSIN DD *
DSN SYSTEM($dbSys)
RUN PROGRAM(DSNTEP2) PARMS('ALIGN(LHS)') PLAN(DSNTEP2)
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD DISP=SHR,DSN=$gen.BEF($db)
//SYSUDUMP DD SYSOUT=*
//SYSTERM DD DUMMY
//SYSIN DD *
-- elar checkDDl before $mx db=$db mbr=$mbr -------------
// DD DISP=SHR,DSN=$gen(CHKSQL1)
// DD *
INSERT INTO SESSION.FAMLISTE ( FAMILY, DBNAME )
VALUES ( '?', '$db')
;
// DD DISP=SHR,DSN=$gen(CHKSQL2)
// ENDIF $*)
// IF RC=0 THEN
//S${mx}DDL EXEC PGM=IKJEFT01,DYNAMNBR=200,TIME=99
//SYSTSIN DD *
DSN SYSTEM($dbSys)
RUN PROGRAM(DSNTEP2) PARMS('ALIGN(LHS)') PLAN(DSNTEP2)
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTERM DD DUMMY
//SYSIN DD *
-- elar createDDl $mx db=$db mbr=$mbr -------------
--#SET MAXERRORS 0
set current sqlid = 'S100447';
$@[ if \ $dbEx then $@=[
create database $db
BUFFERPOOL BP2 INDEXBP BP1 CCSID EBCDIC
STOGROUP GSMS4
;
$] $]
// DD DISP=SHR,DSN=$lib($mbr)
// ENDIF
$*(
// IF RC=0 THEN
//S${mx}CHA EXEC PGM=IKJEFT01,DYNAMNBR=200,TIME=99
//SYSTSIN DD *
DSN SYSTEM($dbSys)
RUN PROGRAM(DSNTEP2) PARMS('ALIGN(LHS)') PLAN(DSNTEP2)
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD DISP=SHR,DSN=$gen.AFT($db)
//SYSUDUMP DD SYSOUT=*
//SYSTERM DD DUMMY
//SYSIN DD *
-- elar checkDDl after $mx db=$db mbr=$mbr -------------
// DD DISP=SHR,DSN=$gen(CHKSQL1)
// DD *
INSERT INTO SESSION.FAMLISTE ( FAMILY, DBNAME )
VALUES ( '?', '$db')
;
// DD DISP=SHR,DSN=$gen(CHKSQL2)
// ENDIF $*)
$@/sleep/ if mx // 10 = 0 then $@=[
// IF RC = 0 THEN
//SLE$mx EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSPROC DD DISP=SHR,DSN=$rxLib
//WSH DD DUMMY
//SYSTSIN DD *
ws2 @ call sleep 30
// ENDIF
$] if mx > 30 then leave $/sleep/
$/jcl/
$]
call lmmEnd lmmId
$@proc @/splitCheckDDL/
call readDsn $checkSql, c.
do cx=1 to c.0 until abbrev(c.cx,
, 'INSERT INTO SESSION.FAMLISTE ( FAMILY, DBNAME )')
end
if cx >= c.0 then
call err 'INSERT INTO SESSION... not in' $checkSql
call writeDsn $gen'(chkSql1) ::f', c., cx-1, 1
do cx=cx+1 to c.0 until pos(';', c.cx) > 0
end
ox = 0
do cx=cx+1 to c.0
ox = ox+1
o.ox = c.cx
end
call writeDsn $gen'(chkSql2) ::f', o., ox, 1
call writeDsn $gen.bef'(#) ::f133', o., 0, 1
call writeDsn $gen.aft'(#) ::f133', o., 0, 1
$/splitCheckDDL/
$#out 20131129 11:08:28
$#out 20131129 11:05:40
$#out 20131129 11:03:09
$#out 20131129 10:59:13