日期:2014-05-16 浏览次数:20529 次
Oracle系列之一----Datatype And Subprogram:http://overshit.iteye.com/admin/blogs/932585;
Oracle系列之二----Exception And Expression:http://overshit.iteye.com/admin/blogs/932605;
Oracle系列之三----Implicit Cursor:http://overshit.iteye.com/admin/blogs/932609;
Oracle系列之四----Dynamic Cursor:http://overshit.iteye.com/admin/blogs/932610;
Oracle系列之五----Cursor And Variable:http://overshit.iteye.com/admin/blogs/932612;
Oracle系列之六----Procedure--Package--Purity:http://overshit.iteye.com/admin/blogs/932615;
Oracle系列之七----Trigger:http://overshit.iteye.com/admin/blogs/932616;
?
先来看个decode:
create table emp( empid number(4) primary key not null, salary number (8) not null ) insert into emp values(1,1000); insert into emp values(2,4000); select * from emp; select decode (sign(salary-3000),1,salary*1.05,-1,salary*1.1) from emp
?
decode可以接很多expression:
decode(condition,expressiona,valuea,expressionb,valueb,……expressionn,valuen,default value) if condition = expressiona then return (valuea) elsif condition = expressionb then return (valueb) …… elsif condition = expressionn then return (valuen) else return (default value) end if;
?
?
下面的case等语句就省略decode写法了
?
----if expression,input:'徐雪花' declare v_custage number(3); v_custname varchar2(50); begin v_custname := &custname ; select custage into v_custage from customer where custname = v_custname and custid = 73; if v_custage < 20 then update customer set custage = custage + 3 where custname = v_custname; elsif v_custage >20 and v_custage < 40 then update customer set custage = custage + 1 where custname = v_custname; else dbms_output.put_line('not in add age area!'); end if; exception when no_data_found then dbms_output.put_line('no customer found!'); end; ----case:单值,等值比较:case后接表达式,when后接具体的值,input:'A' declare str varchar2(1); begin str := &str; case str when 'A' then dbms_output.put_line('A:Good Job'); when 'B' then dbms_output.put_line('B:So So'); when 'C' then dbms_output.put_line('C:Come On'); end case; end; ----case:范围,条件比较:case后接when语句,when后接条件表达式,input:56.78 declare num number(6,2); begin num := # case when num < 60 then dbms_output.put_line('Failure'); when num < 80 then dbms_output.put_line('Good'); when num < 100 then dbms_output.put_line('Perfect'); end case; exception when case_not_found then dbms_output.put_line('no suit case:' || sqlerrm); end; ----case expression:as part of a sentence ----in assignment expression declare num number(5); val varchar2(50); begin num := # val := case num when 1 then 'First' when 2 then 'Second' when 3 then 'Third' else 'No' end || ' Group'; dbms_output.put_line(val); end; ----in select expression select * from customer where custname = '彭海燕' declare str varchar2(50); begin select case when custage between 1 and 18 then 'Girl' when custage between 24 and 40 then 'Woman' else 'GrandMother' end param into str from customer where custname = '彭海燕' and custid = 96; dbms_output.put_line(str); end; select case when custage between 1 and 18 then 'Girl' when custage between 24 and 40 then 'Woman' else 'GrandMother' end Person from customer ----goto null:<<lable>>后不能直接跟exception这类关键字类的语句,要用null把标签隔开,类似的关键字还有endloop之类 declare num number(5) := # begin if num < 5 then goto labelParam; else dbms_output.put_line('nothing'); null; end if; dbms_output.put_line('welcome to you!'); <<labelParam>> dbms_output.put_line('less than five!'); end; ----loop,while,for:common in cycle expression:they are make up of loop end l