论坛登陆 注册 文章专区 笑话频道 影视频道 投稿文章 旧版浏览
首页 | 页界资讯 | 网络应用 | 软件应用 | 组网技术 | 网络原理 | 聊天通讯 | 网管知识 | 帮助
笑话 | 操作系统 | 注 册 表 | 编程开发 | 数 据 库 | 媒体动画 | 网页设计 | 图形图象 | 地图
论坛 | 网络安全 | 安全防范 | 服 务 器 | 硬件学堂 | 路由技术 | 搜索研究 | 站长经验 | 投稿
影院 | 教育频道 | 特色专题 | 精文荟萃 | 注 册 码 | 论坛社区 | 网站地图 | 广告服务 | 旧版
设为首页 加入收藏
当前位置:首页>>文章>>数据库>>Oracle>>正文

Oracle数据库游标使用大全

www.xker.com 作者: 来源:uml.org.cn 加入日期:2006-1-16 11:08:45

【问题提问、论坛交流】

FETCH cursor_name INTO variable[,variable,...]


对于SELECT定义的游标的每一列,FETCH变量列表都应该有一个变量与之相对应,变量的类型也要相同

例:

SET SERVERIUTPUT ON

DECLARE

v_ename EMP.ENAME%TYPE;

v_salary EMP.SALARY%TYPE;

CURSOR c_emp IS SELECT ename,salary FROM emp;

BEGIN

OPEN c_emp;

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

CLOSE c_emp;

END


这段代码无疑是非常麻烦的,如果有多行返回结果,可以使用循环并用游标属性为结束循环的条件,以这种方式提取数据,程序的可读性和简洁性都大为提高,下面我们使用循环重新写上面的程序:

SET SERVERIUTPUT ON

DECLARE

v_ename EMP.ENAME%TYPE;

v_salary EMP.SALARY%TYPE;

CURSOR c_emp IS SELECT ename,salary FROM emp;

BEGIN

OPEN c_emp;

LOOP

FETCH c_emp INTO v_ename,v_salary;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

END


记录变量

定义一个记录变量使用TYPE命令和%ROWTYPE,关于%ROWsTYPE的更多信息请参阅相关资料

记录变量用于从游标中提取数据行,当游标选择很多列的时候,那么使用记录比为每列声明一个变量要方便得多

当在表上使用%ROWTYPE并将从游标中取出的值放入记录中时,如果要选择表中所有列,那么在SELECT子句中使用*比将所有列名列出来要安全得多

例:

SET SERVERIUTPUT ON

DECLARE

R_emp EMP%ROWTYPE;

CURSOR c_emp IS SELECT * FROM emp;

BEGIN

OPEN c_emp;

LOOP

FETCH c_emp INTO r_emp;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUT.PUT.PUT_LINE(Salary of Employee||r_emp.ename||is|| r_emp.salary);

END LOOP;

CLOSE c_emp;

END;


%ROWTYPE也可以用游标名来定义,这样的话就必须要首先声明游标:

SET SERVERIUTPUT ON

DECLARE

CURSOR c_emp IS SELECT ename,salary FROM emp;

R_emp c_emp%ROWTYPE;

BEGIN

OPEN c_emp;

LOOP

FETCH c_emp INTO r_emp;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUT.PUT.PUT_LINE(Salary of Employee||r_emp.ename||is|| r_emp.salary);

END LOOP;

CLOSE c_emp;

END;


带参数的游标

与存储过程和函数相似,可以将参数传递给游标并在查询中使用这对于处理在某种条件下打开游标的情况非常有用它的语法如下:

CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement;


定义参数的语法如下:

Parameter_name [IN] data_type[{:=|DEFAULT} value]


与存储过程不同的是,游标只能接受传递的值,而不能返回值参数只定义数据类型,没有大小

另外可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠

在打开游标时给参数赋值,语法如下:

OPEN cursor_name[value[,value]....];


参数值可以是文字或变量

本新闻共5页,当前在第3页  1  2  3  4  5  

编辑:xker.com

上一篇:Oracle9i中监视索引的使用
下一篇:没有了
关闭窗口】【浏览次数:】【发送给好友】【收藏此页
相关文章
·Oracle9i中监视索引的使用·使用Oracle实现实时通信·Oracle SQL 内置函数大全
·Oracle实用技巧
推荐文章 最新文章 热门文章
·Oracle数据库游标使用大全
·Oracle9i中监视索引的使用
·使用Oracle实现实时通信
·制作MP3播放器TXT图书之三剑客
·什么是IPTV
·全面控制Win XP的安装进度过程
·电子图书制作方法之EXE格式篇
·用VC6.0实现快捷方式中的查找目标功能
·实战网络服务器安全配置技巧
·在Java SE中使用Hibernate框架
·ASP.NET入门随想之多态、接口与委托
·Windows虚拟内存加速密籍
·性能“脱胎换骨”骗术 解密优化骗局
·使用 MySQL 开始 PHP 会话
·AJAX及使用E4X编写Web服务脚本
·Oracle数据库游标使用大全
·Oracle9i中监视索引的使用
·使用Oracle实现实时通信
·千万不能更新的QQ网络硬盘
·遵循国际网站标准进行网站设计和改善
·制作MP3播放器TXT图书之三剑客
·SQL注入技术和跨站脚本攻击的检测
·如何从Html页面中提取所有汉字
·ASP中实现的类似URLEncode的编码函数
·为你的程序创建一个控制台
·处理较长文章,添加... 效果的解决方
·网吧资源有效利用之——带宽管理
·怎么写dos病毒
·某知名大企业的教训--慎用AJAX框架
·做了两个月ajax,总结一些小经验
·个人简历表格
·免费代理IP(每日更新)
·QQ密码丢失后能做的事情:快速找回密码
·WinRAR 3.51 注册码
·Norton AntiVirus 2006 注册码(激活
·系统优化 专题
·找回QQ密码的注意事项 
·史上最强QQ个人档案资料欣赏
·最经典的黑客入门教材
·求职简历封皮
·怎样查找对方的IP地址
·FlashFXP 3.3.1 build 1089注册码
·2005最新最全注册码集中营(11月更新)
·应届毕业生求职信
·ACDSee v8.0注册码
评论 本站声明
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
【注】 发表评论必需遵守以下条例:
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
  • 本站大部分为网络转载,如有版权问题,请通知我们,我们立即更正!

设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003-2006 xker.com All rights reserved. 网站合作、广告联系QQ:12231446
小新技术网 冀ICP备05002857号