Oracle入门(十四.11)之使用显式游标属性
一、游标和记录
此示例中的游标基于SELECT语句,该语句仅检索每个表行的两列。 如果它检索了六列或七,八,二十个呢?
DECLAREv_emp_id employees.employee_id%TYPE;v_last_name employees.last_name%TYPE;CURSOR emp_cursor ISSELECT employee_id, last_nameFROM employeesWHERE department_id = 30;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_last_name;...
该游标检索整个EMPLOYEES行。 凌乱而啰嗦,不是吗?
DECLAREv_emp_id employees.employee_id%TYPE;v_first_name employees.first_name%TYPE;v_last_name employees.last_name%TYPE;...v_department_id employees.department_id%TYPE;CURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_first_name, v_last_name ...v_department_id;...
比较下面的代码片段。 你看到了什么差异?
DECLAREv_emp_id ...;v_first_name ...;...v_department_id ...:CURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id =30;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_first_name,... v_department_id;...
DECLARECURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30;v_emp_recordemp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_record;...
右侧的代码使用%ROWTYPE根据游标声明记录结构。 记录是PL / SQL中的复合数据类型。
二、PL / SQL记录的结构
记录是一种复合数据类型,由多个字段组成,每个字段都有自己的名称和数据类型。 您通过在字段名前加上记录名来引用每个字段。 %ROWTYPE用与它所基于的游标相同的字段声明一个记录。
(1)cursor_name%ROWTYPE的结构
DECLARECURSOR emp_cursor ISSELECT employee_id, last_name, salary FROM employeesWHERE department_id = 30;v_emp_record emp_cursor%ROWTYPE;
(2)游标和%ROWTYPE
%ROWTYPE便于处理活动集的行,因为您可以简单地获取记录。
DECLARECURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30;
v_emp_record emp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id|| ' - '
||v_emp_record.last_name);END LOOP;CLOSE emp_cursor;
END;
(3)游标和%ROWTYPE:另一个例子
DECLARECURSOR emp_dept_cursor ISSELECT first_name, last_name, department_nameFROM employees e, departments dWHERE e.department_id = d.department_id;
v_emp_dept_record emp_dept_cursor%ROWTYPE;
BEGINOPEN emp_dept_cursor;LOOPFETCH emp_dept_cursor INTO v_emp_dept_record;EXIT WHEN emp_dept_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_dept_record.first_name||' – '||v_emp_dept_record.last_name||' – '||v_emp_dept_record.department_name);END LOOP;CLOSE emp_dept_cursor;
END;
三、显式游标属性
与隐式游标一样,有几个属性可用于获取有关显式游标的状态信息。 当附加到游标变量名称后,这些属性返回有关游标操作语句执行的有用信息。
(1)%ISOPEN属性
只有当光标打开时才可以获取行。 在执行提取以测试游标是否处于打开状态之前,请使用%ISOPEN游标属性。 %ISOPEN返回游标状态:如果打开则为TRUE,否则返回FALSE。
例:
IF NOT emp_cursor%ISOPEN THEN
OPEN emp_cursor;
END IF;
LOOPFETCH emp_cursor...
(2)%ROWCOUNT和%NOTFOUND属性
通常在循环中使用%ROWCOUNT和%NOTFOUND属性来确定何时退出循环。
对以下内容使用%ROWCOUNT游标属性:
•处理确切的行数
•计算循环中到目前为止获取的行数和/或确定何时退出循环
对以下内容使用%NOTFOUND游标属性:
•确定查询是否找到符合条件的行
•确定何时退出循环
(3)%ROWCOUNT和%NOTFOUND的示例
此示例显示了如何在循环中使用%ROWCOUNT和%NOTFOUND属性作为退出条件。
DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employees;v_emp_record emp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%ROWCOUNT > 10 OR emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id |' '|| v_emp_record.last_name);END LOOP;CLOSE emp_cursor;
END;
(4)SQL语句中的显式游标属性
您不能直接在SQL语句中使用显式游标属性。 以下代码返回一个错误:
DECLARECURSOR emp_cursor ISSELECT employee_id, salary FROM employeesORDER BY SALARY DESC;v_emp_record emp_cursor%ROWTYPE;v_count NUMBER;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%NOTFOUND;INSERT INTO top_paid_emps(employee_id, rank, salary)VALUES(v_emp_record.employee_id, emp_cursor%ROWCOUNT,v_emp_record.salary);
...
Oracle入门(十四.11)之使用显式游标属性相关推荐
- Oracle入门(十四.10)之显式游标简介
一.上下文区域和游标 Oracle服务器分配一个称为上下文区域的私有内存区域来存储由SQL语句处理的数据. 每个上下文区域(因此每个SQL语句)都有一个与其关联的游标.您可以将游标视为上下文区域的标签 ...
- Oracle 11g Release 1 (11.1) 游标——显式游标
http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/static.htm#CIHCAHJA 本文内容 声明一个游标 打开一个游标 用游标获取一个 ...
- Oracle隐式游标和显式游标
游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的e ...
- oracle 游标内存自动释放,详解Oracle隐式游标和显式游标
游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的e ...
- oracle中的cursor属性有哪些,Oracle学习11:游标(cursor)--显式游标隐式游标、游标四个属性、循环遍历...
1.概述 上文PLSQL学习中提到的知识,可以发现,基本都可以通过Java等语言实现,而为了实现程序的可移植性,实际开发工作中我们也是如此做的. 那么PLSQL的重点是什么呢?接下来我们来介绍游标cu ...
- oracle显性游标,Oracle高级显式游标的使用
1.参数化的游标作用:多次打开相同的游标,返回不同的结果集.游标声明部分的形参必须与OPEN语句中提供的实参相对应(数量与数据类型). 例1: DECLARE v_empno emp1.empno%T ...
- Oracle 游标遍历 显式游标 静态游标 OPEN v_cur(); WHILE v_cur%FOUND LOOP; LOOP FETCH v_cur INTO v_row
-- Created on 2018/11/6 by YXQ --显示游标 & 静态游标的处理 declare --定义(游标一个可以遍历的结果集) --声明cursor ...
- Oracle显式游标和隐式游标
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处 ...
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
最新文章
- golang strings.Fields 使用
- ubuntu下安装wine
- android之frame动画详解
- leetcode 954. Array of Doubled Pairs | 954. 二倍数对数组(Java)
- 9.停下来说说jquery
- jboss8日志级别设置_罐中研讨会:设置JBoss BRMS全日研讨会
- 石头机器人红灯快闪_机器人集体“快闪”活动爆红网络 “我是AI”与您相约智能新时代...
- 小型elf Hello,World程序
- java嵌套循环语句_Java学习笔记(七) 循环语句
- python中对字符串进行编码_Python 中的字符串编码
- SPH(光滑粒子流体动力学)流体模拟实现三:Marching Cube算法(2)
- vue3 ts 手动封装message消息组件
- FS FT DTFT DFT关系及频谱分析总结
- [Android 测试] 性能回归测试之 MonkeyRunner使用、插件扩展、结合批处理
- 苹果手机又刷屏啦!!它是如何做到的?
- 1049: 平方和与立方和 Python
- mt管理器去除应用广告
- latex里图片大小如何调整_如何使Latex中的图片放大依然清晰
- 电脑网络连接为什么常常连接不上
- 模式识别作业2——SYSU
热门文章
- Java substring() 方法
- [Java基础]自定义注解 格式本质
- 高等数学下-赵立军-北京大学出版社-题解-练习9.1
- 洛谷P2884 [USACO07MAR]Monthly Expense S
- [蓝桥杯2019初赛]等差数列-数列
- python窗口显示表格_pyqt 调用tablewidget窗口时无法显示窗口内容
- CF1028F. Make Symmetrical
- Codeforces Round #764 (Div. 3)
- 对弈(nim-k游戏博弈)
- CF891C-Envy【可撤销并查集】