一、游标FOR循环

游标FOR循环处理显式游标中的行。 这是一个快捷方式,因为游标被打开,循环中的每次迭代都会获取一次行,当处理最后一行时会退出循环,并且游标会自动关闭。 当最后一行被提取时,循环本身在迭代结束时自动终止。

(1)语法

FOR record_name IN cursor_name LOOPstatement1;statement2;. . .
END LOOP;

在语法中:
•record_name是隐式声明的记录的名称(作为cursor_name%ROWTYPE)

•cursor_name是先前声明的游标的PL / SQL标识符

注意:v_emp_record是隐式声明的记录。

(2)隐式记录访问

可以使用此隐式记录访问获取的数据, 通过使用INTO子句,没有声明变量来保存获取的数据。 该代码没有OPEN和CLOSE语句分别打开和关闭游标。

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employeesWHERE department_id = 50;
BEGINFOR v_emp_record IN emp_cursorLOOPDBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id|| ' ' ||v_emp_record.last_name);END LOOP;
END;

(3)游标FOR循环比较

将游标FOR循环代码与您在前一文中学到的展开代码进行比较。 这两种形式的代码在逻辑上彼此相同,并产生完全相同的结果。

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name
FROM employeesWHERE department_id = 50;
BEGINFOR v_emp_record IN emp_cursorLOOPDBMS_OUTPUT.PUT_LINE(…);END LOOP;
END;
DECLARECURSOR emp_cursor ISSELECT employee_id, last_nameFROM employeesWHERE department_id = 50;v_emp_record emp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTOv_emp_record;EXIT WHEN emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(…);END LOOP;CLOSE emp_cursor;
END;

(4)游标FOR循环:第二个例子

已将v_dept_record隐式声明为dept_cursor%ROWTYPE。 它包含多少个字段?

DECLARECURSOR dept_cursor ISSELECT department_id, department_nameFROM departmentsORDER BY department_id;
BEGINFOR v_dept_record IN dept_cursorLOOPDBMS_OUTPUT.PUT_LINE( v_dept_record.department_id|| ' ' ||v_dept_record.department_name);END LOOP;
END;

二、循环游标准则

(1)指南

•不要声明控制循环的记录,因为它是隐式声明的。
•隐式记录的范围仅限于循环,因此无法在循环外引用记录。

•您可以通过record_name.column_name访问获取的数据。

(2)测试游标属性

您仍然可以测试游标属性,例如%ROWCOUNT。 在取出并处理了五行后,此示例从循环中退出。 光标自动关闭。

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employees;
BEGINFOR v_emp_record IN emp_cursorLOOPEXIT WHEN emp_cursor%ROWCOUNT > 5;DBMS_OUTPUT.PUT_LINE( v_emp_record.employee_id|| ' ' ||v_emp_record.last_name);END LOOP;
END;

(3)游标FOR循环使用子查询

你可以更进一步。 你根本不需要声明游标! 相反,您可以直接在FOR循环中指定光标所基于的SELECT。 这样做的好处是所有的游标定义都包含在一个FOR ...语句中。 这使代码的后续更改变得更加容易和快速。

例子

FOR语句中的SELECT子句在技术上是一个子查询,因此您必须将其放在括号中。

BEGINFOR v_emp_record IN (SELECT employee_id, last_nameFROM employees WHERE department_id =50)LOOPDBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id||' '||v_emp_record.last_name);END LOOP;
END;

再次,比较这两种形式的代码。 它们在逻辑上是相同的。 但是你宁愿写哪一个?

BEGINFOR v_dept_rec IN (SELECT *FROM departments)LOOPDBMS_OUTPUT.PUT_LINE(…);END LOOP;
END;
DECLARECURSOR dept_cursor ISSELECT * FROM departments;v_dept_rec
dept_cursor%ROWTYPE;
BEGINOPEN dept_cursor;LOOPFETCH dept_cursor INTOv_dept_rec;EXIT WHEN
dept_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(…);END LOOP;CLOSE dept_cursor;
END;

Oracle入门(十四.12)之游标FOR循环相关推荐

  1. java怎样用类模板创建对象_java入门(十四) | 面向对象(OOP)之类和对象

    上一期是变量,在java中变量总是无处不在,而变量其意就是可以改变的数,在一般情况下我们可以以变量类型,变量名,变量值来描述它 这一期是给面向对象(OOP)开了一个头,对他的概念,三大特征有了一个基础 ...

  2. Oracle笔记 十四、查询XML操作、操作系统文件

    --1.随机数 select dbms_random.value from dual; select mod(dbms_random.random, 10) from dual; --0-9随机数 s ...

  3. Oracle入门(四)之查询基本信息

    一.查询基本信息 (1) 查询实例服务 SQL> show parameter instance name (2)查询数据库名字 SQL> show parameter db_name; ...

  4. slam入门——十四讲笔记(一)

    文章目录 第1讲 预备知识 第1部分 数学基础 第2讲 初识SLAM 2.1 引子:小萝卜的例子 2.2 经典视觉SLAM框架 2.3 SLAM问题的数学表述 2.4 实践:编程基础 1. 安装Lin ...

  5. c语言 switch循环语句,C语言入门(四)之switch、循环语句

    switch格式 switch格式: switch (条件表达式) { case 整数: // case可以有一个或多个 语句; break; case 整数: // case可以有一个或多个 语句; ...

  6. python3行3列文件数据赋值_Python3快速入门(十四)——Pandas数据读取

    Python3快速入门(十四)--Pandas数据读取 一.DataFrame IO 1.CSV文件 pandas.read_csv(filepath_or_buffer, na_values='NA ...

  7. IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<上网慢?经常掉线?这篇文章告诉你该怎么办!>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注 ...

  8. Oracle入门(十四.13)之带参数的游标

    一.带参数的游标 参数是一个变量,其名称用于游标声明中. 当游标打开时,参数值被传递给Oracle服务器,Oracle服务器使用它来决定要将哪些行检索到光标的活动集中. 这意味着您可以在块中多次打开和 ...

  9. Oracle入门(十四)之PL/SQL

    一.PL/SQL 基本语法 PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展. (1) (2) (3) (5) (6) (7)数据类型 Number 数字型 Varchar2 ...

最新文章

  1. PHP_常用字符串处理函数
  2. agentzh 的 Nginx 教程(版本 2015.03.19) 第一篇
  3. python http 身份认证简介
  4. 满足条件的两个数或多个数
  5. 万能数据库查询分析器使用技巧之(十四)
  6. React中的状态管理---Mobx
  7. 25 Refs转发机制与在高阶组件中的使用
  8. 利用函数wavread对语音信号进行采样_AI大语音(一)——语音识别基础(深度解析)...
  9. python之matplotlib详解
  10. 050医疗项目-模块五:权限设置-第三方系统的接入
  11. 鼠标移开事件(onmouseout)
  12. java常用类的特征_Java常用类-包装类
  13. 条码控件商IDAutomation极大改善了Barcode Image Generator性能
  14. H5基础阶段二(表格、表单)
  15. 【IoT库】物联网行业仍普遍存在的问题
  16. PHP集成开发环境介绍
  17. 公司开发的APP,如何生成一个二维码,供客户下载使用
  18. HTML5 之 Img 标签
  19. pytorch中num_workers详解
  20. 给自家人做个招聘广告,前后端和移动工程师看过来

热门文章

  1. [mybatis]动态sql_内置参数_parameter_databaseid
  2. 高等数学下-赵立军-北京大学出版社-题解-练习9.4
  3. GCD and LCM Aizu - 0005(辗转相除)+GCD LCM Inverse POJ - 2429(java或【Miller Rabin素数測试】+【Pollar Rho整数分解】)
  4. P4288 [SHOI2014]信号增幅仪 最小圆覆盖
  5. 【CTSC2010】珠宝商【后缀自动机】【点分治】【根号分治】
  6. 【水】几个网络流图论模型的记录
  7. P3301 [SDOI2013]方程
  8. CodeForces: 360(div1)361(div2)
  9. 洛谷P2497:基站建设(splay、斜率优化)
  10. 取模除法(逆元)(费马小定理)(线性求逆元)