2012-03-07 44 views
1

如何在執行IKJEFT01的同時在SQL查詢中傳遞參數?例如:如何通過IKJEFT01 Utility運行dymanic SQL?

//UNLOAD EXEC PGM=IKJEFT01 
//SYSTSPRT DD SYSOUT=* 
//SYSTSIN DD * DSN SYSTEM(DB2X) RETRY(120) 
RUN PROGRAM(DSNTIAUL) 
PLAN(DSNTIAUL) - 
PARM('SQL') 
END 
//SYSPRINT DD SYSOUT=* 
//SYSUDUMP DD SYSOUT=D 
//SYSREC00 DD DSN=FCSTN.AK.XXXXXX, 
//   DISP=(NEW,CATLG,DELETE), 
//SYSPUNCH DD SYSOUT=*           
//SYSIN  DD * 
SELECT * FROM ABC.DEF WHERE XYZ='999' 
/* 

而不是將sql查詢中的值設置爲'999'我想通過變量傳遞值。 這可以怎麼做? Plz幫助...!

+0

JCL變量或TWS/OPCA變量? – Deuian 2012-03-07 11:34:31

回答

4

在UNLOAD步驟之前有一個單獨的步驟,將SQL的變量行寫入臨時文件。然後將該臨時文件與SQL的不變行結合起來。

寫意......

//SETVAR EXEC PGM=PRM2FILE,PARM='WHERE XYZ=''&VAL''' 
//SYSPRINT DD SYSOUT=* 
//OUTPUT01 DD DISP=(NEW,PASS,DELETE), 
//    LRECL=80, 
//    AVGREC=U, 
//    RECFM=FB, 
//    SPACE=(80,(1,1),RLSE) 
//* 
//UNLOAD EXEC PGM=IKJEFT01 
//SYSTSPRT DD SYSOUT=* 
//SYSTSIN DD * DSN SYSTEM(DB2X) RETRY(120) 
RUN PROGRAM(DSNTIAUL) 
PLAN(DSNTIAUL) - 
PARM('SQL') 
END 
//SYSPRINT DD SYSOUT=* 
//SYSUDUMP DD SYSOUT=D 
//SYSREC00 DD DSN=FCSTN.AK.XXXXXX, 
//   DISP=(NEW,CATLG,DELETE), 
//SYSPUNCH DD SYSOUT=*           
//SYSIN  DD * 
SELECT * FROM ABC.DEF 
//   DD DISP=(OLD,PASS),DSN=*.SETVAR.OUTPUT01 
//* 

...其中PRM2FILE是你寫取無論是在PARM字段並將其寫入OUTPUT01 DD的程序。

我們這樣做很大程度上可以實現您嘗試實現的相同目標。