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

前端之家收集整理的这篇文章主要介绍了Oracle SQL – 如何使用可选搜索参数构建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,获取一些示例代码,演示其工作原理.

@H_502_34@

猜你在找的Oracle相关文章