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