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工具中会提示“实际返回的行数超出请求的行数”;如果没有返回记录,那么会提示“未找到任何数据”。如果要想在出现这两种异常时不提示如上语句,则需要在脚本中加入异常处理部分,然后在出现异常时按照用户自己定义的流程继续执行脚本。