为什么要使用?

笔者查阅了一些资料之后得到的结论是,

    关系型数据库是面向集合的,而游标是面向行的,游标可对取出来的集合(结果集)中每一行进行相同或不同的操作,还提供对基于游标位置而对表中数据进行删除或更新的能力,某些特     殊的查询操作也可以通过游标去完成,让你在查询暂时没办法的时候多了一种选择。
游标的类型?
游标分为:
    1、fetch 定义的游标名 into 游标变量
    2、for 游标变量 in 游标名 loop
   两种方式,其中for方式是隐式游标,可以对数据库后台进行打开关闭的操作,fetch是显示游标,需要操作者自行打开关闭,关于二者优劣网上说法不一,但是个人来看,还是for的方   式比较简便。
游标语法:
  有以下例子:
  for:
  
declare
--定义游标
cursor c_job
is
--查询的语句
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

这个方法是说这个变量是表中的一个实例,类似于表里的一行数据。
一种简单的操作方法也可以是这样的:
declare
n_count number;
begin
for cur_record in(
--游标要查询的集合
select t.category_id from AM_CATEGORY t)
loop
--游标执行的内容
execute immediate 'update am_'||cur_record.category_id||'_entry set storage_id=null where storage_id is not null';
DBMS_output.put_line('update am_'||cur_record.category_id||'_entry set storage_id=null where storage_id is not null');
end loop;
--commit;
end;

其中excute immediate是为了解决动态拼接表名进行游标式表数据更新的一种方式 ,EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交 ,刚动态拼接的表不会马上存在,1. EXECUTE IMMEDIATE会让这个表理科变成真实的表,这样就可以及时使用了
cur_record.category_id:游标名.查询的字段名称
不是动态的表一般不用到
excute immediate
如:
declare
cur_entryid number;
begin
for cur_entryid in(
--游标要查询的集合
select entry_id from AM_AJ_ENTRY )
loop
--游标执行的内容
delete from AM_AJ_datum t where t.entry_id =cur_entryid.entry_id;
end loop;
--commit;
end;

最新文章

  1. oracle数据泵导入
  2. wdcp 下apache模式开启https访问,支持多站点
  3. JS设计模式初探
  4. Animo.js :一款管理 CSS 动画的强大的小工具
  5. linux定时执行脚本
  6. Android 通过按钮弹出系统菜单(通过Button显示菜单)转
  7. 二十七、EFW框架BS系统开发中的MVC模式探讨
  8. 【同步复制常见错误处理3】找不到存储的过程 sp_MSins_tablename
  9. Servlet连接数据库
  10. 解决xcode7添加启动图片不显示
  11. cookie原理
  12. js添加下拉列表的模糊搜寻
  13. Einbahnstrasse
  14. 一名合格的Web安全工程师之成长路径
  15. [Swift]LeetCode903. DI 序列的有效排列 | Valid Permutations for DI Sequence
  16. 基于WanAndroid开放API实现的文章阅读APP
  17. Python开发——【循环】语句
  18. iterrows(), iteritems(), itertuples()对dataframe进行遍历
  19. RedHat如何关闭防火墙
  20. iOS程序的执行顺序 和 UIViewController的生命周期

热门文章

  1. 五款好玩又好用的Linux网络测试和监控工具
  2. AIX 第6章 指令记录
  3. IP碎片原理:攻击和防护
  4. Android Retrofit实现原理分析
  5. Web开发基础
  6. jQuery Mobile中文手册:开发入门
  7. 如何在MySql中记录SQL日志
  8. 包装类-Character
  9. 【原创】Linux下编译链接中常见问题总结
  10. YII Framework学习教程-YII的安全