Oracle常用函数(row_number、merge into、case等)

oracle的ROW_NUMBER()语法如下(可以用来去重):

1、row_number() over(order by column asc)先对列column按照升序,再为每条记录返回一个序列号:
select personalid,row_number() over(order by personalid asc) rn from  neogoodsrule

2、row_number() over(partition by column1 order by column2 asc) 先按照column1分组,再对分组后的数据进行以column2升序排列
select personalid,ct_smp_type,row_number() over(partition by personalid order by ct_smp_type asc) rn from neogoodsrule 

oracle的merge into语法如下:

判断目标表中有没有符合on()条件中的数据,有了就从原表更新数据,没有就从原表插入数据。  

merge into 目标表 a
using 源表 b
on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  
when matched then update set a.更新字段=b.字段
when  not macthed then insert into a(字段1,字段2……)values(值1,值2……)
举例:
merge into RME_PORT@resltjt_t   a 
using ( select  * from  resltjt_t.TRS_TRS_NE ) rs
on ( a.nms_orig_res_id=rs.nms_orig_res_id )  --条件
when matched then 
update set    a.super_res_id=rs.TRS_NE_ID

case用法

(CASE B.DELETE_STATE WHEN '1' THEN '全部一致' WHEN '2' THEN 'B有O无' ELSE '' END)
as "DELETE_STATE",


-- 此处用了dbms_lob.substr函数用来操作的大型对象,叫做大型对象定位器,
-- 前面的utl_raw.cast_to_varchar2函数用来将blob转为varchar2

select utl_raw.cast_to_varchar2(dbms_lob.substr(rsp_xml)) from inf_comm_client_calllog t where col3='200980701501593004';

--ROWNUM使用注意
ROWNUM < 2 查询时,只返回1条数据
使用时,若总查询出数据为5条,则rownum < 10条会导致一直查询

 

DECODE用法

--status字段中的数据 若是0 则显示初始  若是1 则显示正常 否则显示 待用 ;

第一位:表中的字段;最后一位:其它情况的返回值; 中间的位数:前一位表示 表中的值 后一位表示 要返回的值

select (DECODE(status, '0', '初始化', '1', '正常', '待用')) from es_user_status;

你可能感兴趣的:(Oracle数据库,oracle)