首页 > 解决方案 > “可选”参数的输入参数验证

问题描述

我正在编写一个 SQL 查询,但我被困在 WHERE 子句上。我要对最后一行执行的操作是,如果没有为参数输入值,请使用 * 参数(所有值)。

WHERE
(REGEXP_INSTR('%params', '///') > 0 AND REGEXP_LIKE(column1,'%params'))
OR (REGEXP_INSTR('%params', '///') = 0 AND REGEXP_LIKE('%params'))
OR (REGEXP_INSTR('%params', '') = 1 

这是我遇到问题的最后一行:

OR (REGEXP_INSTR('%params', '') = 1 

所有运行时参数都必须有一个值,所以这不能是 NULL 值。

我不确定 ' ' 是否会起作用,或者可能会出现一些不需要的行为。

标签: sqloracleoracle-sqldeveloper

解决方案


Oracle 将''其视为NULL,因此您无法为所欲为。您需要直接比较NULL

WHERE (REGEXP_INSTR('%params', '///') > 0 AND REGEXP_LIKE(column1,'%params')) OR
      (REGEXP_INSTR('%params', '///') = 0 AND REGEXP_LIKE('%params')) OR
      ('%params' IS NULL)

即使''where not NULL,在另一个字符串中寻找一个空字符串也没有什么意义。

您也可以使用LENGTH(),但您必须小心,因为它实际上返回NULL而不是0.


推荐阅读