问题描述
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语句
2.有或基于ename是否为null的条件:
3.动态SQL
对于这样一个简单的情况,我倾向于选择1。由于它们是单独的陈述,因此您可能会获得比选项2更好的计划。而且静态SQL比动态SQL更安全,更好的代码分析选项,使其优于3。
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




