日期:2014-05-16  浏览次数:20378 次

oracle的exception和rownum

?

SELECT count(B.VALUE_SX_BTXM) INTO V_BTBZCOUNT FROM DM_SX_BTXM A, XX_SX_BTXM B 

WHERE A.DM_BTXM = B.DM_BTXM 

AND A.DM_SX_BTXM = B.DM_SX_BTXM 

AND A.DM_BTXM = VI_DM_BTXM 

AND A.DM_SX_BTXM =VI_DM_SX_BTXM 

AND b.dm_xzqh=VI_XZQH 

AND b.btnd = VI_BTND 

AND A.LX_SX_BTXM = '1' AND A.XY_BZ = 'Y' 

AND B.XY_BZ = 'Y'; 

exception 

when NO_DATA_FOUND

 then V_BTBZCOUNT := 0 ; 

END; 

?

?

oracle的异常也分内部异常和外部异常,内部异常主要是系统异常,而外部异常是自定义的异常,比如上面的一段代码就是定义了一个异常:当查询的sql没有查询到数据:NO_DATA_FOUND 时抛出了一个异常,并且在then后面做了异常的后续处理

?

?

rownum

oracle没有limit,在Oracle中,要按特定条件查询前N条记录,用个rownum就搞定了。

不能对rownum用">",这也就意味着,如果你想用
select * from emp where rownum > 5
则是失败的。

rownum如果单独用=,也只有在rownum=1时才有用。
使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。

那如何才能找到第二行以后的记录呀。可以使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
SQL>select * from(select rownum no ,id,name from student) where no>2;