2012-03-07 37 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的程序。

我们这样做很大程度上可以实现您尝试实现的相同目标。