经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » Oracle » 查看文章
Oracle数据库中游标的游标的使用
来源:cnblogs  作者:科技之夜  时间:2018/9/25 19:50:39  对本文有异议

本人不喜欢说概念啥的,就直接说明使用方法吧

案例1:

  1. 1 DECALRE
  2. 2 --声明游标
  3. 3 CURSOR C_USER(C_ID NUMBER) IS
  4. 4 SELECT NAME FROM USER WHERE TYPEID = C_ID;
  5. 5 V_NAME C_USER%rowtype; --定义游标变量
  6. 6 BEGIN
  7. 7 OPEN C_USER(变量值); --打开游标
  8. 8 LOOP
  9. 9 FETCH C_USER INTO V_NAME;
  10. 10 EXIT FETCH C_USER%NOT FOUND;
  11. 11 do something
  12. 12 END LOOP
  13. 13 CLOSE C_USER;
  14. 14 END;
View Code
  1. 是不是有点看不懂,没关系,我也没怎么看得懂

所以案例2:

说明:

  1、file$是表名,file#, status$,blocks 是字段名

  2、将表file$中的file#, status$,blocks 数据列出来,相当于select file#, status$,blocks from file$;

  1. --连接系统数据库
  2. SQL>conn / as sysdba
  3. --以下是在sql窗口下执行的
  4. declare
  5. --声明游标
  6. Cursor cur_file is
  7. select file#, status$,blocks from file$;
  8. CurFileInfo cur_file%rowtype; --定义游标变量(所有的变量都在里面)
  9. begin
  10. open cur_file; --打开游标
  11. Loop
  12. Fetch cur_file into CurFileInfo ;
  13. Exit when cur_file%notfound;--查不到数据则退出;
  14. Dbms_Output.put_line(CurFileInfo.file#);
  15. end loop;
  16. Exception--出现异常,则关闭游标,并打印出问题来
  17. when others then
  18. close cur_file;
  19. Dbms_Output.put_line(sqlerrm);
  20. if cur_file%isopen then
  21. --关闭游标
  22. close cur_file;
  23. end if;
  24. end;

 然后稍微进阶一下:

案例3:

问题:假如我查到多个表,而每个表都要加入同一个字段,这个怎么解决。

解决办法如下:

  1. 1 --连接数据库,是在命令窗口下执行的
  2. 2 登陆系统:
  3. 3 sqlplus /nolog
  4. 4 以管理员的身份运行:
  5. 5 SQL>conn / as sysdba
  6. 6
  7. 7 --以下是在SQL窗口下执行的
  8. 8 DECLARE
  9. 9 ADD_SQL VARCHAR2(1000); --定义添加字段的语句
  10. 10 ADD_TABLE_NAME VARCHAR2(50); --定义获取的表名
  11. 11 CURSOR ADD_TABLE_FIELD IS --取名添加表字段
  12. 12 SELECT TABLE_NAME FROM USER_TABLES where table_name like 'WRI%SYNOPSIS$' ; --查出指定的表出来
  13. 13 BEGIN
  14. 14 OPEN ADD_TABLE_FIELD;
  15. 15 LOOP
  16. 16 --提取一行数据到ADD_TABLE_FIELD
  17. 17 FETCH ADD_TABLE_FIELD INTO ADD_TABLE_NAME;
  18. 18 --判断是否读取到,没读取到就退出
  19. 19 --%notfound是没有取到的意思
  20. 20 EXIT WHEN ADD_TABLE_FIELD%NOTFOUND;
  21. 21
  22. 22 --下面sql语句中,表名两边都要有空格,不然不会执行语句的,即:[table ']和[' add]不能写成[table']和['add]
  23. 23 ADD_SQL := 'alter table ' || ADD_TABLE_NAME || ' add 修改人 varchar2(20)';
  24. 24 EXECUTE IMMEDIATE ADD_SQL;--执行该语句
  25. 25
  26. 26 END LOOP;--关闭游标
  27. 27 CLOSE ADD_TABLE_FIELD;
  28. 28 END;

 

好了,差不多了,就这样了。

 

等等,你们应该没有照搬执行吧,不然的话, 怎么删除我增加的列呢?

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号