【问题标题】:Optional clauses in WHERE SQL COBOLWHERE SQL COBOL 中的可选子句
【发布时间】:2022-08-14 20:59:05
【问题描述】:

我有一个表格,每个字段都是可选的。 我想做一个在 WHERE 中包含可选条件的 SQL 查询。

我正在使用 COBOL 作为编程语言,所以我不能在查询中连接 where 子句

贝娄是我的查询

SELECT * 
FROM TABLE
WHERE Field1 = :VAL1
AND Field2 = :VAL2

当表单的字段为空时如何填写 VAL1 和 VAL2 以获取表的所有行TABLE

  • “可选”是指这些字段的值是 1) 空字符串 2) 完整字符空间还是 3) 空值?
  • @TheImpaler 一个空字符串。顺便说一句,我可以确定表单发送的值并用任何值填充该字段。
  • 这个问题的答案似乎……回答了所提出的问题。如果缺少某些内容,请对其发表评论/否则标记为答案。对于关于动态 sql 的单独问题,您可能想要创建一个新问题,准确指定您使用的 DBMS(某些 DB2)和 SQL 预编译器(IBM 的?在 zOS/AIX/Linux/Windows 上?)以及您在那里尝试过的内容(可能在检查其关于该主题的文档之后)。

标签: sql db2 cobol


【解决方案1】:

您可以在过滤中添加额外的条件。例如:

SELECT * 
FROM TABLE
WHERE (Field1 = :VAL1 or :VAL1 = '')
  AND (Field2 = :VAL2 or :VAL2 = '')

笔记:如果性能成为问题,可以通过使用动态 SQL 来改进。也就是说,通过仅动态添加重要的参数。当然,这需要在编码和测试方面付出额外的努力。

【讨论】:

  • 如果表单的字段不为空,我可以通过连接 where's 子句来构造查询吗?还是通过在字段为空时发送特定的字段值?
  • @AhmedSEDDIK“如果表单的字段不为空,我可以通过连接 where's 子句来构造查询吗?” -- 是的,这正是动态 SQL 的含义。您可以通过连接字符串手动完成,也可以使用 ORM 解决方案(大多数 ORM 都是开箱即用的)。
【解决方案2】:

您可以使用 SQLCODE =100 这是一个示例:

 EXEC SQL    
 SELECT * 
 FROM TABLE
 WHERE Field1 = :VAL1
 AND Field2 = :VAL2
 END-EXEC.

 EVALUATE SQLCODE
    WHEN ZEROS
      CONTINUE
    WHEN 100
     *fill VAL1 and VAL2 
    WHEN OTHER
     DISPLAY 'ERREUR'
END-EVALUATE.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2018-04-01
    • 2023-03-08
    相关资源
    最近更新 更多