Db2 SQL - 如何在不同的where条件之间切换

问题描述 投票:0回答:0

需要您对以下情况的建议。

一个旧的 COBOL 程序有 SELECT SQL,它有多个 WHERE 子句。但是这些 WHERE 子句不能一起使用。根据变量值,一个 WHERE 条件被打开,其他条件被忽略。

SQL查询:

SELECT EMP_ID, EMP_SSN, EMP_PH, EMP_SALARY, EMP_EMAIL
INTO <:DCLGEN variable1, DCLGEN variable2...variable5>
FROM <Table name>
WHERE ((EMP_ID = <:HOST Var1> OR 'N' = :HOST switch1)
             AND
             (EMP_SSN = <:HOST Var2> OR 'N' = :HOST switch2)
             AND
             (EMP_PH = <:HOST Var3> OR 'N' = :HOST switch3)
             AND
             (EMP_EMAIL = <:HOST Var4> OR 'N' = :HOST switch4))

现在在上面的查询中,您可以看到有 4 个 WHERE 条件与 AND 连接。

在程序中,当我们想要在 WHERE 子句下运行第一个条件 (EMP_ID) 时,我们将 SPACE 传递给 HOST switch1 和 'N' 以休息所有三个。类似地,当我们想要激活第三个条件(EMP_PH)时,然后将 SPACE 切换到 HOST switch3 并使用“N”来休息所有三个,依此类推。

现在我们面临着这个查询的性能问题。原因是,虽然我们有 4 个索引(WHERE 条件下的所有 4 列),但由于这些 HOST 开关变量,DB2 正在执行 TS 空间而不是索引扫描。所以我们需要重写查询,我们不能在查询中使用这种HOST Switch变量。

  1. 一个解决方案是删除所有 HOST 开关变量并将查询分成 4 个差异查询。但是该程序将很冗长并且需要进行大量代码更改。所以我们正在努力避免这种情况。

有人可以分享我们如何在不使用上述类型的主机开关变量的情况下在单个 SQL 查询中实现此目的的建议吗?

注意- 由于业务逻辑,我们需要根据某些变量值使用特定的 WHERE 条件。

我将查询分成 4 个部分(每个查询都有一个 WHERE 条件)并删除了所有 HOST 开关变量。根据我调用每个 SQL 查询的业务情况。但我们正试图避免这种情况,因为需要更改整个程序以适应这种新方法。

db2 cobol mainframe db2-zos
© www.soinside.com 2019 - 2024. All rights reserved.