加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL – 如何使用可选搜索参数构建where子句

发布时间:2021-01-28 23:47:38 所属栏目:站长百科 来源:网络整理
导读:页面中有四个字段可以说 EMPLOYEE IDDEPTLOCATIONUNIT: 用户可以输入任何字段值都是可选的,如果他输入EMPLOYEE ID,则查询应该返回与该EMPLOYEE ID相关的行.如果他只输入LOCATION,那么查询应该返回该位置的所有员工.如何使用可选参数编??写where子句条件. 解

页面中有四个字段可以说

EMPLOYEE ID
DEPT
LOCATION
UNIT:

用户可以输入任何字段值都是可选的,如果他输入EMPLOYEE ID,则查询应该返回与该EMPLOYEE ID相关的行.如果他只输入LOCATION,那么查询应该返回该位置的所有员工.如何使用可选参数编??写where子句条件.

解决方法

如果在谓词中使用NVL,Oracle可能会构建一个优化良好的查询:

select *
  from employee
 where employee_id = nvl(:employee_id,employee_id)
   and dept = nvl(:dept,dept)
   and location = nvl(:location,location)
   and unit = nvl(:unit,unit)

上面的代码大致相当于LeoLozes的答案.虽然他的答案更具可读性,但在这种情况下,神秘版本可能运行得更快.一个重要的区别是,如果列为NULL,则上述代码将不起作用.如果你有可以为空的列,你需要使用类似LeoLoze的答案,因为null = null不是真的.

Oracle习惯于NVL技巧,可以使用FILTER操作自动将此静态查询转换为动态查询.执行计划将同时具有FULL TABLE SCAN和INDEX RANGE SCAN,并将在运行时选择适当的一个,具体取决于绑定变量的值.请参阅我的答案here,获取一些示例代码,演示其工作原理.

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读