8.3.2 游标中使用异常处理

使用游标时,某些情况下得到的数据超出了控制范围,如果不加处理会出现脚本执行中断的情况。这种情况下,脚本开发者通常会使用异常处理来维护脚本的稳定性。可以参考示例11来增加这方面的知识。

【示例11】在游标中使用异常处理

前面介绍过当数据库中的数据记录发生变化时使用SELECT INTO语句返回的结果有可能不是单条记录(可能空,也可能多条),这时会出现脚本中断并报错的现象。为了避免这种硬性的中断,可以使用异常处理。把示例10稍作修改,具体代码如下:


01 DECLARE

02 cur_productname productinfo.Productname%TYPE;

03 cur_productprice productinfo.Productprice%TYPE;

04 BEGIN

05 SELECT productname,productprice INTOcur_productname,cur_productprice

06 FROM PRODUCTINFO

07 where productid='02400400012';

08 IF SQL%FOUND THEN

09 DBMS_OUTPUT.PUT_LINE('产品名称:'||cur_productname

10 ||'产品价格:'||cur_productprice);

11 END IF;

12 EXCEPTION

13 WHEN NO_DATA_FOUND THEN

14 DBMS_OUTPUT.PUT_LINE('没有数据!');

15 WHEN TOO_MANY_ROWS THEN

16 DBMS_OUTPUT.PUT_LINE('数据过多!');

17

18 END;


【代码解析】

❑第1~11行参考示例10的说明。

❑第12行表示异常处理的关键词。

❑第13行表示如果SELECT INTO返回记录为空时会出现NO_DATA_FOUND异常,此时脚本会执行第14行的内容。

❑第15行表示如果SELECT INTO返回多条记录时会出现TOO_MANY_ROWS异常,此时脚本执行第16行的内容。

【执行效果】

由于表PRODUCTINFO没有productid值是02400400012的数据,所以它会引发异常。执行效果如下:


没有数据!


通过异常处理可以有效避免意外引起的脚本错误,在使用游标时需要注意这一点。