PLSQL游标
静态游标:结果集已经确实(静态定义)的游标。分为隐式和显式游标
隐式游标:所有DML语句为隐式游标,通过隐式游标属性可以获取SQL语句信息;
显式游标:用户显式声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显式游标;
REF游标:动态关联结果集的临时对象
静态游标Cursor:隐式游标/显示游标
游标是内存中的一个区域,在DML语句运行时打开,完成后关闭
判断隐式游标的属性
隐式游标
执行DML操作,返回游标情况
declare
begin
update scott.emp set emp.sal=emp.sal*1.3 where emp.job='SALESMAN';
if sql%found then
dbms_output.put_Line(sql%rowcount||' rows has been updated');
elsif sql%notfound then
dbms_output.put_line('0 updated');
end if;
end;
/
4 rows has been updated
PL/SQL procedure successfully completed.
declare
begin
update scott.emp set emp.sal=emp.sal*1.3 where emp.job='SALESMAN';
if sql%found then
dbms_output.put_line(sql%rowcount||' rows has been updated');
elsif sql%notfound then
dbms_output.put_line(sql%rowcount||' rows has been updated');
end if;
end;
/

定义显式游标
declare
cursor cur_emp is select * from emp;
v_empRow emp%ROWTYPE;
begin
if cur_emp%isopen then --游标已经打开
null;
Else --游标未打开
open cur_emp;--打开游标
end if;
fetch cur_emp into v_empRow;--取出游标当前行数据
while cur_emp%FOUND loop--判断是否有数据
dbms_output.put_line(cur_emp%ROWCOUNT||'/EMPNO '||v_empROw.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);
fetch cur_emp into v_empRow;--把游标指向下一行
end loop;
close cur_emp;--关闭游标
end;
/
1/EMPNO SMITH,position: CLERK,salary: 800
2/EMPNO ALLEN,position: SALESMAN,salary: 1600
3/EMPNO WARD,position: SALESMAN,salary: 1250
4/EMPNO JONES,position: MANAGER,salary: 2975
5/EMPNO MARTIN,position: SALESMAN,salary: 1250
6/EMPNO BLAKE,position: MANAGER,salary: 2850
7/EMPNO CLARK,position: MANAGER,salary: 2450
8/EMPNO SCOTT,position: ANALYST,salary: 3000
9/EMPNO KING,position: PRESIDENT,salary: 5000
10/EMPNO TURNER,position: SALESMAN,salary: 1500
11/EMPNO ADAMS,position: CLERK,salary: 1100
12/EMPNO JAMES,position: CLERK,salary: 950
13/EMPNO FORD,position: ANALYST,salary: 3000
14/EMPNO MILLER,position: CLERK,salary: 1300
定义显示游标流程
定义游标(cur_emp)
If cur_emp%isopen then null
Else open cur_emp
取得一行记录(fetch cur_emp into v_empRow)
如果Cur_emp%found 则执行LOOP循环:
输出当前行记录
取得下一行记录(fetch cur_emp into v_empRow)
回到LOOP循环
关闭游标
使用LOOP循环输出游标
eclare
cursor cur_emp is select * from emp;
v_empRow emp%ROWTYPE;
begin
if cur_emp%isopen then --游标打开
null;
Else --游标未打开
open cur_emp;--打开游标
end if;
loop
fetch cur_emp into v_empRow;取出游标当前行数据
exit when cur_emp%notfound;--如果没有找到数据则退出循环
dbms_output.put_line(cur_emp%ROWCOUNT||'/EMPNO '||v_empROw.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);
end loop;
close cur_emp;--关闭游标
end;
/
定义显示游标流程
定义游标(cur_emp)
If cur_emp%isopen then null
Else open cur_emp
LOOP循环:
取出游标当前行数据(fetch cur_emp into v_empRow)
exit when cur_emp%notfound;--如果没有找到数据则退出循环
输出
回到LOOP循环
关闭游标
使用FOR循环操作游标
declare
cursor cur_emp is select * from emp;
begin
for v_empRow in cur_emp loop
dbms_output.put_line(cur_emp%ROWCOUNT||'/ename:'||v_empRow.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);
end loop;
end;
/
尽量使用FOR循环操作
在编写游标操作中,使用FOR循环操作游标不仅代码简单,而且可以将游标的状态交给系统去完成
定义游标(cur_emp)
FOR循环判断数据是否在游标内(FOR v_empRow in cur_emp loop)
输出
循环结束
定义参数游标
declare
cursor cur_emp(dno emp.deptno%type) is select * from emp where deptno=dno;
begin
for v_empRow in cur_emp(&deptno) loop
dbms_output.put_line(cur_emp%ROWCOUNT||'/ename:'||v_empRow.ename||',position: '||v_empRow.job||',salar0y: '||v_empRow.sal);
end loop;
end;
/
PLSQL游标的更多相关文章
- PLSQL游标使用
游标是一个指针,它指向一块SQL区域,该区域用于存储处理过来的SELECT或者其他的DML操作返回的数据.由PLSQL创建并管理的游标成为隐式游标,用户创建并管理的成为显示游标.游标可以看做是指向记录 ...
- SQL记录-PLSQL游标
PL/SQL游标 Oracle会创建一个存储区域,被称为上下文区域,用于处理SQL语句,其中包含需要处理的语句,例如所有的信息,行数处理,等等. 游标是指向这一上下文的区域. PL/SQL通过控制光标 ...
- Oracle PLSQL游标、游标变量的使用
参考文章:https://www.cnblogs.com/huyong/archive/2011/05/04/2036377.html 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实 ...
- PLSQL开发笔记和小结(转载)
***************************************** PLSQL基本结构 ***************************************** 基本数据 ...
- Oracle之PLSQL总结
基本数据类型变量 1. 基本数据类型 Number 数字型 Int 整数型 Pls_integer 整数型,产生溢出时出现错误 Binary_integer 整数型,表示带符号 ...
- PLSQL开发笔记和小结
***************************************** PLSQL基本结构*****************************************基本数据类型变 ...
- PLSQL学习教程(全)
基于ORACLE9i+PL/SQLDeveloper7.1.4) 课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ...
- plsql oracle 使用教程
课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名ALIASES 5.连接列 6.在SQL PLUS中编辑缓冲,修改 ...
- Oracle存储过程、游标、函数
SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数 ...
随机推荐
- VS2013 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
全是2012版本的 没找到2013的! 控制面板>程序>程序和功能 找到如下选中软件右击修复 即可 需关闭VS2013 参考:https://blog.csdn.net/zhaoyun9 ...
- 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
实验原理: 按键的一端与STM32的GPIO(PB9)相连,且PB9外接一个1k大小的限流上接电阻. 初始化时把PB9设置成输入模式,当按键弹起时,PB9由于上拉电阻的作用呈高电平(3.3V): 当按 ...
- Odoo 去掉 恼人的 "上午"和"下午"
- Win10共享打印机所需要的设置(无需密码访问实现打印机共享,共享不要密码)
原文:https://m.baidu.com/from=1086k/bd_page_type=1/ssid=0/uid=0/pu=usm@0,sz@1320_1002,ta@iphone_2_5.1_ ...
- debian系列下c++调用mysql, linux下面安装mysql.h文件
mysql.h的报错还没有解决,你们不用看了,等我解决了吧还不知道什么时候 先用c吧 #include <stdio.h> #include <stdlib.h> #inclu ...
- numpy的介绍——总览
为什么有numpy这个库呢? 1. 准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[ ...
- Go指南练习_Stringer
源地址 https://tour.go-zh.org/methods/18 一.题目描述 通过让 IPAddr 类型实现 fmt.Stringer 来打印点号分隔的地址. 例如,IPAddr{1, 2 ...
- MSP MCU I2C入门指南
这是一份介绍性指南,指导你如何用超低功耗MSP微控制器 (MCU) 开始一个与I2C通信有关的项目: 简介 I2C(或称为I2C,集成电路总线)是一种两线制通信形式,主要用来在短距离.电路板间的应用中 ...
- opencv各种绘图 直线 矩形 圆 椭圆
画图函数 (1)直线cvLine函数 其结构 void cvLine(//画直线 CvArr* array,//画布图像 CvPoint pt1,//起始点 CvPoint pt2,//终点 CvSc ...
- Java -- POI -- 随笔汇总
1. 判断指定的单元格是否是合并单元格 /** * 功能:判断指定的单元格是否是合并单元格 * 原理:excel中的合并单元格其实就是首单元格,只不过该单元格增加了 rowspan和colspan两个 ...