日期:2014-05-17  浏览次数:20840 次

选择条件变化怎么处理?不用动态语句
select *from emp
where
job=decode(3,2,'MANAGER','SALESMAN');
=======================================================
这条语句本来是当(3==2)为真时 :job=‘MANAGER’,为假时:job='SALESMAN'
现在想为假时 选出所有job 该怎么修改?

不用动态语句

------解决方案--------------------
select decode(3,2,'MANAGER','SALESMAN') from emp
 其实你按你的要求,就是取所有语句,然后把3==2的替换掉,所以
------解决方案--------------------
select case when (3==2) then 'MANAGER' else job end job from emp
刚才错了
------解决方案--------------------
SQL code

--根据意思应是这样子
select * from emp
where (3=2 and job='MANAGER') or (3<>2 and job='SALESMAN');
--但是3=2不可能成立,因此也可以写为这样子
select * from emp where job='SALESMAN';
--所以你的3=2因该换成其他有意义的条件才合时

------解决方案--------------------
create or replace procedure var_select(
name in varchar2)
is
emp_rec emp%rowtype;
begin
select * into emp_rec from emp
where
job=decode(name,'test1','MANAGER','');
end; 

只要job is not null 就可以这样
------解决方案--------------------
SQL code

SQL> create or replace procedure var_select(
  2  p_name in varchar2)
  3  is
  4      emp_rec emp%rowtype;
  5      cursor cur is select * from emp
  6          where job=decode(p_name,'test1','MANAGER','SALESMAN');
  7  begin
  8      open cur;
  9      loop
 10          fetch cur into emp_rec;
 11          exit when cur%notfound;
 12          dbms_output.put_line('empno:'||emp_rec.empno);
 13      end loop;
 14      close cur;
 15  end;
 16  /

过程已创建。

SQL> exec var_select('test1');
empno:7566                                                                      
empno:7698                                                                      
empno:7782                                                                      

PL/SQL 过程已成功完成。

SQL> exec var_select('test2');
empno:7499                                                                      
empno:7521                                                                      
empno:7654                                                                      
empno:7844                                                                      

PL/SQL 过程已成功完成。

------解决方案--------------------
楼主,你自己解决了应该舒服了,给分吧。