sql - “可选”参数的输入参数验证
问题描述
我正在编写一个 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)
即使''
where not NULL
,在另一个字符串中寻找一个空字符串也没有什么意义。
您也可以使用LENGTH()
,但您必须小心,因为它实际上返回NULL
而不是0
.
推荐阅读
- javascript - 无法从列表中删除组件(React Hook)
- ios - Xcode 自动完成功能在 SwiftUI 中不起作用
- python - 为什么这里使用这个 ValueError 异常而不是 TypeError 异常?
- java - 有没有办法检查有多少数据加载到缓冲区中?
- bash - 有没有办法让一组 if 语句在所有数组元素上运行?
- android - Kotlin - 将 layoutDirection 设置为 linearlayout 错误绑定
- php - 继续在后台运行 Twitter 流 API
- azure-active-directory - 通过 ReactJs UI 混合 Azure B2B 和 B2C 方法
- c - 使用 getline 和动态存储
- reactjs - React-Redux 无法在 Firestore 中获取我的收藏