日期:2014-05-16 浏览次数:20403 次
?
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;