1. --复制表
  2. create table emp as(select * from scott.emp);
  3. select * from emp;
  4. --(1) 最简单的游标
  5. declare --声明并初始化游标
  6. cursor v_cur is
  7. select empno,ename from emp order by empno;
  8. v_empno emp.empno%type;
  9. v_ename emp.ename%type;
  10. begin
  11. if(not v_cur%isopen) then --打开游标
  12. open v_cur;
  13. end if;
  14. loop --提取记录
  15. fetch v_cur into v_empno,v_ename;
  16. if(v_cur%notfound) then --到达末尾,则退出循环
  17. exit;
  18. end if;
  19. dbms_output.put_line('第'||v_cur%rowcount||'条记录:'||v_empno||','||v_ename);
  20. end loop;
  21. close v_cur; --关闭游标
  22. end;
  23. --(2) 带参数的游标
  24. --查找指定部门的所有员工
  25. cursor v_cur(v_deptno number) is
  26. select empno,ename from scott.emp where deptno = v_deptno order by empno ;
  27. v_empno scott.emp.empno%type;
  28. v_ename scott.emp.ename%type;
  29. v_dno scott.emp.deptno%type;
  30. begin
  31. v_dno:='&请输入部门编号:';
  32. if(not v_cur%isopen) then
  33. open v_cur(v_dno);
  34. end if;
  35. dbms_output.put_line('部门号'||v_dno||'的员工如下:');
  36. loop
  37. fetch v_cur into v_empno,v_ename;
  38. if(v_cur%notfound) then --到达末尾,则退出循环
  39. exit ;
  40. end if;
  41. dbms_output.put_line('第'||v_cur%rowcount||'条记录:'||v_empno||','||v_ename);
  42. end loop;
  43. --关闭游标
  44. close v_cur;
  45. exception
  46. when others then
  47. dbms_output.put_line('提取出错');
  48. end;
  49.  
  50. --(3) 可写游标。让每每个员工工资增加1000
  51. declare
  52. --声明并初始化游标
  53. cursor v_cur is
  54. select 1 from scott.emp order by empno
  55. for update of sal nowait ;
  56. --v_sal scott.emp.sal%type;
  57. i number;
  58. begin
  59. --打开游标
  60. if(not v_cur%isopen) then
  61. open v_cur;
  62. end if;
  63. --提取记录
  64. loop
  65. fetch v_cur into i;
  66. if(v_cur%notfound) then --到达末尾,则退出循环
  67. exit ;
  68. end if;
  69. --update scott.emp set sal = sal+10000 where empno = v_empno;
  70. update scott.emp set sal = sal+10000 where current of v_cur;
  71. end loop;
  72. dbms_output.put_line('成功修改了'||v_cur%rowcount||'人的工资');
  73. --关闭游标
  74. close v_cur;
  75. end;
  76.  
  77. --(4) 简化方式1
  78. declare
  79. --声明并初始化游标
  80. cursor v_cur is
  81. select empno,ename from scott.emp order by empno;
  82. begin
  83. --提取记录
  84. for rec in v_cur loop
  85. dbms_output.put_line('第'||v_cur%rowcount||'条记录:'||rec.empno
  86. ||','||rec.ename);
  87. end loop;
  88.  
  89. end;
  90.  
  91. --(5) 简化方式2
  92. declare
  93. --声明并初始化游标
  94. begin
  95. --提取记录
  96. for rec in (select empno,ename from scott.emp order by empno)
  97. loop
  98. dbms_output.put_line(rec.empno
  99. ||','||rec.ename);
  100. end loop;
  101.  
  102. end;
  103.  
  104. --(6) 返回游标的函数
  105. --返回周三入职的员工
  106. select * from scott.emp where to_char(hiredate,'day')='星期五';
  107.  
  108. create or replace function get_emps_hired_oneday
  109. (
  110. v_day varchar2
  111. )return sys_refcursor
  112. as
  113. v_cur sys_refcursor;--声明1个局部变量游标,用于返回
  114. begin
  115. --打开指定结果集的游标.
  116. open v_cur for
  117. select ename,hiredate from scott.emp
  118. where to_char(hiredate,'day')=v_day;
  119. return v_cur; --将该记录集的游标返回
  120. end;
  121.  
  122. --调用函数,浏览全部的记录。
  123.  
  124. declare
  125. v_cur sys_refcursor;
  126. v_ename varchar2(20);
  127. v_hiredate date;
  128. begin
  129.  
  130. --调用别人写好函数。
  131. v_cur:= get_emps_hired_oneday('星期五');
  132.  
  133. --提取记录
  134. loop
  135. fetch v_cur into v_ename,v_hiredate;
  136. if(v_cur%notfound) then --到达末尾,则退出循环
  137. exit ;
  138. end if;
  139. dbms_output.put_line('第'||v_cur%rowcount||'条记录:'||v_ename||','
  140. ||to_char(v_hiredate,'yyyy-mm-dd day'));
  141. end loop;
  142. --关闭游标
  143. close v_cur;
  144.  
  145. end;

  

oracle--游标--bai的更多相关文章

  1. Oracle 游标示例,带异常处理

    Oracle游标示例一则,带异常处理. DECLARE CURSOR c_dl IS SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ F ...

  2. Oracle游标带参数

    Oracle游标是可以带参数的,而SqlServer的游标就不可以了 create or replace procedure a as cursor b(c_id int)is select * fr ...

  3. Oracle 游标使用(转)

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 ; ; dbms_output.put_line(sql) loop dbms_output.put_line( ; ; ; r_te ...

  4. Oracle 游标使用全解(转)

    转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...

  5. Oracle游标动态赋值

    1. oracle游标动态赋值的小例子 -- 实现1:动态给游标赋值 -- 实现2:游标用表的rowtype声明,但数据却只配置表一行的某些字段时,遍历游标时需fetch into到精确字段 CREA ...

  6. dapper支持oracle游标

    dapper支持oracle游标 Dapper是一个轻型的ORM类.它有啥优点.缺点相信很多朋友都知道了,园里也有很多朋友都有相关介绍,这里就不多废话. 如果玩过Oracle都知道,存储过程基本都是通 ...

  7. Oracle游标的使用示例

    此文是使用Oracle游标的几种方式,for...in会自动打开游标,fetch...into需要手动打开游标,游标类似于一个只会往前移动的指针,每次指向数据集中的一行数据,通过游标可以打开数据集,也 ...

  8. Oracle游标介绍

    Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...

  9. Oracle游标使用

    Oracle游标介绍: --声明游标 CURSOR cursor_name IS select_statement --For 循环游标 --()定义游标 --()定义游标变量 --()使用for循环 ...

  10. [转载]Oracle 游标使用全解

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- 声明游标:CURSOR cursor_name IS select_statement --For 循环游标--(1)定义游标- ...

随机推荐

  1. MBTiles

    MBTiles Specification MBTiles is a specification for storing tiled map data in SQLite databases for ...

  2. UTFGrid

    UTFGrid UTFGrid is a specification for rasterized interaction data. As of version 1.2, it was remove ...

  3. low security dvwa--SQL Injection(Blind)

    1.输入单引号,结果如下: 2.输入永真式 ' and 1=1; -- 结果如下: 多次测试,如果输入的条件为假,就会返回1中的结果,为真则返回2中的结果,由此说明这属于SQL盲注. 3.猜解用户名长 ...

  4. 中国式商业智能报表ActiveReports免费公开课,10月20日开讲

    ActiveReports公开课全方位报表解决方案,满足商业报表五大需求 [开课时间]10月20日[主讲老师]葡萄城报表产品经理[开课形式]网络在线公开课[活动费用]前50名免费 适合人群:报表开发人 ...

  5. Android开发学习—— ContentProvider内容提供者

    * 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...

  6. Linux2.6内核协议栈系列--TCP协议1.发送

    在介绍tcp发送函数之前得先介绍很关键的一个结构sk_buff,在linux中,sk_buff结构代表了一个报文: 然后见发送函数源码,这里不关注硬件支持的分散-聚集: /* sendmsg系统调用在 ...

  7. Maven详解

    一.前言     以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar 包的.最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在 ...

  8. AngularJS 系列 01 - HelloWorld和数据绑定

    目录导读: AngularJS 系列 学习笔记 目录篇 前言: 好记性不如烂键盘,随笔就是随手笔记,希望以后有用. 本篇目录: 1. Hello World 2. AngularJS中的数据绑定 3. ...

  9. nginx反向代理+集群

    1.前期准备: client:192.168.4.1 eth0 proxy:192.168.4.5 eth0 web1:192.168.4.100 eth0 内容2 web2:192.168.4.20 ...

  10. php 时间倒计时代码 个人写法 有好的想法的欢迎贴出来分享

    $now=time(); $secondtime=$end_time-$now;//期限时间减去现在时间 剩余时间 $second=$secondtime % 60;//取余得到秒数 $nowtime ...