在编写PL/SQL代码中使用SELECT语句时如何避免例外发生

在使用SELECT语句为某变量赋值时,往往会出现"NO_DATA_FOUND"和"TOO_MANY_ROWS"等异常情况。

使用SELECT语句分两种情况:

 

第一种情况,判断某表中是否有符合某一条件的记录,这时使用聚组函数MAX就可以避免以上两个例外的发生。

其格式:SELECTMAX(列1),MAX(列2)......INTO变量1,变量2......FROM基表WHERE条件,当没有符合条件的数据时,该语句返回空,即变量1,变量2......的值均为空,而不会出现"NO_DATA_FOUND"例外。

另外使用聚组函数MAX的同时也就避免了"TOO_MANY_ROWS"例外。

 

第二种情况,SELECT语句中含聚组函数SUM,这时如果使用了GROUPBY和HAVING子句,当没有符合条件的记录时将发生"NO_DATA_FOUND"例外,此时避免例外的办法是:去掉GROUPBY和HAVING子句,将HAVING子句的条件加到WHERE子句中。这样在使用SELECT语句时就不必再额外增加一段处理例外的代码,从而简化的代码的编写。

 

另外使用SQL%NOTFOUND也是一种比较好的方式。

SQL%NOTFOUND 是一个布尔值。与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true。否则返回false。这样的语句在实际应用中,是非常有用的。例如要update一行数据时,如果没有找到,就可以作相应操作。如:

begin

  update salary set bonus = 1000 where emp_id = 10;

  if sql%notfound then

     raise e_noteffact;

  end if;

当update emp_id为10的这行记录,而这行记录不存在,则作了相应的异常抛出。

posted @ 2012-06-04 15:08  刘伟聪  阅读(261)  评论(0编辑  收藏  举报