【问题标题】:How to run dymanic SQL through IKJEFT01 Utility?如何通过 IKJEFT01 Utility 运行动态 SQL?
【发布时间】: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 变量?

标签: mainframe jcl


【解决方案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。

我们经常这样做是为了实现您正在努力实现的同一目标。

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2022-01-04
    • 2021-11-12
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多