赛迪网 > IT技术 数据库 > 
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

For Loop读取游标和Open Close的区别

发布时间:2008.04.15 04:51     来源:赛迪网    作者:Gordon

【赛迪网-IT技术报道】在实际的工作喝学习中,许多人对存储过程、函数、包的使用过程以及游标缺乏必要的认识,下文中,我们将通过一个简单的例子,比较一些通过For..Loop读取游标和Open..Close的区别。

-- declare

-- this cursor is get table employee's info

cursor cur_employee is

select * from employee;

-- this curso is get table dept's info

cursor cur_dept is

select * from dept;

-- this cursor is get table employee & dept info

cursor cur_info is

select e.*, d.dept_name

from employee e , dept d

where e.dept_no = d.dept_no(+);

-- to save cursor record's value

v_employee_row employee%rowtype;

v_dept_row dept%rowtype;

-- for .. loop

for v_row in cur_employee loop

-- TODO-A

end loop;

-- TODO-B

-- open ..close

open cur_employee

fetch cur_employee into v_employee_row;

close cur_table_test;

1.使用For..Loop的方式读取cursor,open、fetch、close都是隐式打开的。所以,大家不用担心忘记关闭游标而造成性能上的问题。

2.使用For..Loop的代码,代码更加干净、简洁,而且,效率更高。

3.使用For..Loop读取游标后,存储记录的变量不需要定义,而且,可以自动匹配类型。假如读取多个表的记录,显然用Open的fetch..into就显得相当困难了。

fetch cur_info into X (这里的就相当麻烦,而且,随着涉及的表、字段的增加更加困难)

4.For..Loop在使用游标的属性也有麻烦的地方。因为记录是在循环内隐含定义的,所以,不能在循环之外查看游标属性。

假设要做这样的处理:当游标为空时,抛出异常。你可以把下面的读取游标属性的代码:

if cur_employee%notfound then

-- can not found record form cursor

RAISE_APPLICATION_ERROR(error_code, error_content);

end if;

放在<< TODO-B >>的位置,虽然编译可以通过,但在运行时,它会出现报错:ORA-01001:invalid cursor。

放在<< TODO-A>>的位置,读取游标的notfound属性。显然,这是行不通的。理由如下:如果游标为空,就会直接跳出循环,根本不会执行循环体内的代码。但是,也并不代表,我们就不能使用For..Loop来处理了。大家可以通过设置标志字段处理。

定义变量:v_not_contain_data bollean default true;

在For..Loop循环内增加一行代码:v_not_contain_data := false;

这样,在循环体外我们可以通过标志位来进行判断:

If v_not_contain_data then

RAISE_APPLICATION_ERROR(error_code, error_content);

end if;

(责任编辑:卢兆林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 用一个实例讲解如何正确使用数据库游标 (04-07) · 怎样使用游标 (09-11)
· 细化解析:怎样理解游标的可用性和属性 (09-09) · 解析:如何使用游标执行不同类型的操作 (09-09)
· 教你轻松了解嵌入式SQL中怎样使用游标 (09-09) · Oracle PL/SQL游标的学习 (06-14)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 网站建设市场重新洗牌 一卡通引领革命潮流
· 北京加快信息化建设 医保一卡通年底前启动
· ERP案例分析 SaaS带来冲击 IT服务商面临挑战
· 通方期货CRM解决方案 房地产行业CRM解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统