8.3 隐式游标
隐式游标和显式游标有所差异,它虽然没有显式游标一样的可操作性,但在实际的工作当中也经常用到。本节将介绍隐式游标的内容。
8.3.1 隐式游标的特点
每当运行SELECT或DML语句时,PL/SQL会打开一个隐式的游标。隐式游标不受用户的控制,这一点和显式游标有明显的不同。下面列出了隐式游标和显式游标的不同处:
❑隐式游标由PL/SQL自动管理;
❑隐式游标的默认名称是SQL;
❑SELECT或DML操作产生隐式游标;
❑隐式游标的属性值始终是最新执行的SQL语句的。
【示例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='0240040001';
08 IF SQL%FOUND THEN
09 DBMS_OUTPUT.PUT_LINE('产品名称:'||cur_productname
10 ||'产品价格:'||cur_productprice);
11 END IF;
12 END;
【代码解析】
❑第1~3行声明变量,这部分和显式游标没有区别。
❑第5~7行把查询的数据放进两个变量中。
❑第8行利用游标属性进入条件语句。关于隐式游标的属性后面会单独做介绍。
❑第9~10行输出结果。
❑第11行为IF语句的介绍标志。
❑第12行是BEGIN结束的标志。
此示例演示了如何使用隐式游标。通过脚本可以看出,隐式游标没有像显式游标那样声明一个游标名称,而是直接使用了SQL名称。这是隐式游标的默认名称,可以直接使用。可以利用下面的执行效果了解隐式游标的工作流程。
【执行效果】
执行效果如下:
产品名称:夏普LCD-46G100A 产品价格:7000
注意 SELECT INTO语句一定保证返回一条记录,如果返回多条记录,在PL/SQL Developer工具中会提示“实际返回的行数超出请求的行数”;如果没有返回记录,那么会提示“未找到任何数据”。如果要想在出现这两种异常时不提示如上语句,则需要在脚本中加入异常处理部分,然后在出现异常时按照用户自己定义的流程继续执行脚本。