Oracle SQL – 如何使用可选搜索参数构建where子句
发布时间:2021-02-02 02:31:27 所属栏目:站长百科 来源:网络整理
导读:页面中有四个字段可以说 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,获取一些示例代码,演示其工作原理. (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |