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 empwhere (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 过程已成功完成。
------解决方案--------------------
楼主,你自己解决了应该舒服了,给分吧。