"optional" 参数的输入参数验证

Input parameter validation for "optional" parameter

我正在编写一个 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 值。

我不确定“ ”是否有效,或者是否会出现一些不受欢迎的行为。

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)

即使 '' 不是 NULL,在另一个字符串中寻找空字符串也没有意义。

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