暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 基于参数值需要执行的条件。

askTom 2018-02-15
349

问题描述

create or replace procedure fetch_ids(ename in varchar2,hiredate in date)
as
begin
select * from emp where empname=ename and join_date=hiredate ;

end;


问题陈述:
1) 如果我不传递ename,则需要获取所有员工的详细信息。
2) 如果我将传递ename值和hiredate值,则只需要行进详细信息。

请帮助我。




专家解答

你有几个选择:

1.测试参数,并基于此运行自定义SQL语句

if ename is null then
  select * from emp;
else
  select * from emp where empname=ename and join_date=hiredate ;
end if;


2.有或基于ename是否为null的条件:

select * from emp 
where ( ename is not null and join_date=hiredate and empname=ename ) or
      ( ename is null) ;


3.动态SQL

execute immediate 'select * from emp ' || 
  case when ename is not null then
    'where empname=:ename and join_date=:hiredate'
  else 
    'where :ename is null and nvl(:hiredate, sysdate) is not null'
  end  
  using ename, hiredate


对于这样一个简单的情况,我倾向于选择1。由于它们是单独的陈述,因此您可能会获得比选项2更好的计划。而且静态SQL比动态SQL更安全,更好的代码分析选项,使其优于3。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论