我的要求是从DB2表中选择数据,其中电话号码等于16组电话号码。我试图在本地测试数据上运行此查询,我的程序成功运行! 但是,当我尝试在真实表(备份表)上运行相同的程序时,我的RUN jcl在S722异常终止时失败。
我觉得它不是空间异常,因为我们使用的文件属性为7个柱面(1个主要,6个次要)。根据我的研究,我发现sql查询带有' IN,' LIKE'需要花费太多时间来将Jobcard中的Time参数更改为NOLIMIT。但是noluck !!
有人可以用其他任何方式编写此查询吗?或帮我纠正这个问题......
像这样查询:EXEC SQL
DECLARE WS-CURSOR CURSOR WITH HOLD FOR
SELECT CUST_ID,CUST_NAME,SEQ_NUM,PHONE_NUM FROM PHONE_TAB
WHERE PHONE_NUM IN ('123456789','789456123','456789123','789456123' etc) AND
PHONE_TYPE = 'DU'
END-EXEC.
提前致谢!!
答案 0 :(得分:2)
Sx22系列异常终止表明超出了一些系统定义的参数。例如,S322通常表示您已超过作业卡或作业步骤中TIME参数中的CPU时间量。
S722异常终止表示您生成的线轴输出多于商店JES参数允许的输出。您需要确定该假脱机输出的来源以解决异常终止。
您可能有核心转储(CEEDUMP),已编码的调试输出(SYSOUT或SYSPRINT或STDOUT或STDERR),或者您已编码的失控报告DD。线轴中的JESMSGLG DD可以在SDSF的输出顶部显示,也可以通过选择'?'可以将之前的错误报告给S722。
也许您正在遇到一个导致 S722的S322。这是完全可能的,因为大量数据会出现问题。
将时间参数设置为NOLIMIT是一种昂贵的调试技术,因为大多数大型机商店都有适当的退款算法,通常是CPU时间=某人预算中的金钱。您的商店可能有一个JES出口,可以替代NOLIMIT的其他一些值,以防止其被使用。
如user6542823所示,你可以添加一个JOBPARM LINES = some-large-number来绕过S722,但是你仍然需要解决潜在的问题。
z / OS会尝试为您提供尽可能多的信息来进行调试。利用它给你的东西。
鉴于......
...然后 if ...
......问题可能不在于您的SQL,而是与数据量有关。
查看您的包的EXPLAIN输出,您可能会看到您正在扫描整个PHONE_TAB表。也许生产中存在一个索引,在您正在测试的备份中不存在。
答案 1 :(得分:0)
这是一个内联表连接,而不是在where子句中执行
IRL我会将值放入临时表并加入临时表。但是,例如我已经在线完成了这项工作。
tmp <- data.frame(x = 1:5, y = rnorm(5),
color = c("#00FF00", "#FF0000", "#00FF00", "#ffa500", "#FF0000"))
highchart() %>%
hc_add_series(data= tmp, hcaes(x = x, y = y, color = color), type = "line")
两个表查询可能最难说,但对我来说,维护两个表肯定比每次运行时创建SQL语句的程序更容易。
SELECT CUST_ID,CUST_NAME,SEQ_NUM,PHONE_NUM FROM PHONE_TAB
join (
values('123456789'),('789456123'),('456789123'),('789456123')
) as b (ph) on phone_num = ph
where PHONE_TYPE = DU