首页 > 代码库 > oracle学习 九 游标的使用(持续更)
oracle学习 九 游标的使用(持续更)
为什么要使用?
笔者查阅了一些资料之后得到的结论是,
关系型数据库是面向集合的,而游标是面向行的,游标可对取出来的集合(结果集)中每一行进行相同或不同的操作,还提供对基于游标位置而对表中数据进行删除或更新的能力,某些特 殊的查询操作也可以通过游标去完成,让你在查询暂时没办法的时候多了一种选择。
游标的类型?
游标分为:
1、fetch 定义的游标名 into 游标变量
2、for 游标变量 in 游标名 loop
两种方式,其中for方式是隐式游标,可以对数据库后台进行打开关闭的操作,fetch是显示游标,需要操作者自行打开关闭,关于二者优劣网上说法不一,但是个人来看,还是for的方 式比较简便。
游标语法:
有以下例子:
for:
declare--定义游标cursor c_jobis--查询的语句select user_id,user_name from t_user_info;--定义游标变量c_row c_job%rowtype;begin --使用游标变量在游标中进行检索 for c_row in c_job loop dbms_output.put_line(c_row.user_id||‘-‘||c_row.user_name); --循环条件结束 end loop;end;
fetch:
DECLARE -- 定义游标. CURSOR c_test_main IS SELECT user_id, user_name FROM t_user_info; -- 保存游标数据的变量 v_main_data c_test_main%ROWTYPE;BEGIN -- 打开游标. OPEN c_test_main; LOOP -- 填充数据(主表). FETCH c_test_main INTO v_main_data; -- 假如没有检索到(主表)数据,结束循环处理 Exit when c_test_main%NOTFOUND; dbms_output.put_line(v_main_data.user_id||‘-‘||v_main_data.user_name); END LOOP; -- 关闭游标 CLOSE c_test_main;END;
备注?
1、
dbms_output.put_line(‘输出内容‘);
2、
游标变量名 表名%rowtype游标变量名 游标名%rowtype
个人测试了以下,声明游标变量的两种方法中
游标变量名 游标名%rowtype
这种方式运行的速度更快一点,它是再说这个变量是一行数据的实例,
类似于游标里的一行数据。而
游标变量名 表名%rowtype
这个方法是说这个变量是表中的一个实例,类似于表里的一行数据。
oracle学习 九 游标的使用(持续更)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。