SQL 中的 WHERE 条件 (ORACLE)

丹尼尔·桑托斯

伙计们,我需要帮助。

我有以下代码:

    ...   WHERE res.cod_ordem_producao = pla.cod_ordem_producao -- TO MAKE THE JOIN
  AND (to_char(:codordemproducao)='X' -- INITIAL VALUE FOR THE PARAMETER
       AND to_char(:grau)='X') -- INITIAL VALUE FOR THE PARAMETER
  OR ((to_char(res.cod_ordem_producao) = to_char(:codordemproducao)
       AND to_char(:grau)='X'
       AND res.COD_ESTADO_TUBO IN ('G',
                                   'W')
       AND res.DTH_ENTRADA BETWEEN :dth_inicio AND :dth_final )
      OR (to_char(pla.dsc_aco) = to_char(:grau)
          AND to_char(:codordemproducao)='X'
          AND res.COD_ESTADO_TUBO IN ('G',
                                      'W')
          AND res.DTH_ENTRADA BETWEEN :dth_inicio AND :dth_final ))
ORDER BY res.DTH_ENTRADA

我们这里有 3 个参数:DATE、CODORDEM、GRAU。用户可以输入;

  1. 只有“日期”(没有“GRAU”和“CODORDEM”)
  2. 'date' 和 'grau'(没有 'CODORDEM')
  3. 'date' 和 'codordem'(没有 'grau')

我的代码错误在哪里?

我的实际代码是:1 - 用户可以输入日期 + grau + coodordem 2 - 用户可以输入日期 + grau

思考斯蒂本斯

将连接条件移动到连接子句。始终为日期添加标准。然后检查剩余的两个参数是否为空或仅满足其中一个和第二个参数。

...
from res
join pla on res.cod_ordem_producao = pla.cod_ordem_producao
where res.dth_entrada between :dth_inicio and :dth_final
  and 
    (
      (:codordemproducao is null and :grau is null)
      or (
           (
             (:codordemproducao is null and to_char(pla.dsc_aco) = to_char(:grau))
             or 
             (:grau is null and to_char(res.cod_ordem_producao) = to_char(:codordemproducao))
           )
           and res.cod_estado_tubo in ('G', 'W')
         )
    )

如果它们作为s发送:parameter is nullto_char(:parameter) = 'X'替换X据我了解,您提供日期和其余两个参数的情况都是被禁止的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章