如何通过 IKJEFT01 Utility 运行动态 SQL?
Posted
技术标签:
【中文标题】如何通过 IKJEFT01 Utility 运行动态 SQL?【英文标题】:How to run dymanic SQL through IKJEFT01 Utility? 【发布时间】:2012-03-07 10:24:08 【问题描述】:我们如何在执行 IKJEFT01 时在 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”。 如何做到这一点?请帮助...!
【问题讨论】:
一个 JCL 变量或 TWS/OPCA 变量? 【参考方案1】:在您的 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。
我们经常这样做是为了实现您正在努力实现的同一目标。
【讨论】:
以上是关于如何通过 IKJEFT01 Utility 运行动态 SQL?的主要内容,如果未能解决你的问题,请参考以下文章
为什么我的ODBC连接在Visual Studio中运行SSIS加载时失败,而在使用Execute Package Utility运行相同的包时则失败
请问大佬有pasmutility.dll免费版软件百度云资源吗