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的数据,所以它会引发异常。执行效果如下:
没有数据!
通过异常处理可以有效避免意外引起的脚本错误,在使用游标时需要注意这一点。