下面是一个隐式光标的介绍,在这种情况下,当显示光标被使用时。

1。查询返回单行记录——一个隐式游标;



2。查询返回多行记录和执行过程的显式游标的行

-显示光标属性


声明
光标cur_emp是SELECT * FROM emp;
row_emp cur_emp %ROWTYPE;
开始
打开cur_emp;
取cur_emp为row_emp;
而cur_emp %

dbms_output.put_line(row_emp empno | |----。| | row_emp。ename);
取cur_emp为row_emp;
结束循环;
近cur_emp;
结束;


-使用显式游标修改数据(为所有部门经理支付1000)


声明
emp_cur是光标
选择empno,ename,萨尔从EMP工作= 'manager'for更新;
emp_row emp_cur %ROWTYPE;
开始
打开emp_cur;

取emp_cur为emp_row;
如果没有那么emp_cur %
出口;
其他的
更新EMP组萨尔=萨尔+ 1000,当前emp_cur;
最后如果;
结束循环;
承诺;
近emp_cur;
结束;


注意:

1、如果光标前后使用游标关闭,Oracle将invalid_cursor误差(ora-01001)用光标属性;



2。如果结果集为空后的第一次提取,% = false,%不= true,%行数= 0;



三.如果批量收集使用,然后%行值可能不是0或1。实际上,他返回提取到相关集合的行数。

-循环的光标(所有部门经理工资的1000削减)


声明
emp_cur是光标
选择empno,ename,萨尔从EMP工作= 'manager'for更新;
开始
对于emp_row在emp_cur

更新EMP组萨尔= sal-1000在当前emp_cur;
结束循环;
承诺;
结束;


我们可以看到,for循环的游标确实简化了游标的开发。我们不需要打开、获取和关闭语句。我们不需要检测具有%属性的最后一条记录。所有这些Oracle帮助都完成了。



- 5000给经理,另外1000付


声明
emp_cur是光标
从EMP中选择*以便更新;
开始
对于emp_row在emp_cur

如果emp_row工作= 'manager'then。
更新EMP组萨尔=萨尔+ 5000,当前emp_cur;
其他的
更新EMP组萨尔=萨尔+ 1000,当前emp_cur;
最后如果;
结束循环;
结束;


下面是oracle光标游标的简单用法介绍。

介绍了共两游标,一种光标光标,sys_refcursor高效利用,散装收集

1、光标游标使用


*简单光标光标
*学生表中有一个名称字段,您可以将其更改为其他表测试。
* /
-定义
声明
-定义游标和赋值(不能与游标分开使用)
光标stus_cur是SELECT * FROM学生;
-定义式
cur_stu学生%ROWTYPE;
开始/ **
开始
-打开游标
打开stus_cur;
——循环周期

循环条件
退出时未stus_cur %;
-光标值式的价值
取stus_cur为cur_stu;
输出
dbms_output.put_line(cur_stu。名称);
-循环结束
结束循环;
-关闭光标
近stus_cur;
执行结束
结束;


结果执行


已申报
-定义游标和赋值(不能与游标分开使用)
光标stus_cur是SELECT * FROM学生;
-定义式
cur_stu学生%ROWTYPE;
开始/ **
开始
-打开游标
打开stus_cur;
——循环周期

循环条件
退出时未stus_cur %;
-光标值式的价值
取stus_cur为cur_stu;
输出
dbms_output.put_line(cur_stu。名称);
-循环结束
结束循环;
-关闭光标
近stus_cur;
执行结束
结束;
/

杨过

政委
liuzifei
kawakaze
任Woxing
什么
令狐冲
韦一笑
张无忌

谢逊
小龙女




2、sys_refcursor游标的使用


*
*游标名称:sys_refcursor
*特别注意分配方式:
*不与上述重复内容叙述
* /
声明
stu_cur sys_refcursor;
stuone学生%ROWTYPE;

开始
-这个句子的赋值
打开stu_cur为SELECT * FROM学生;
读取指定式
取stu_cur为stuone;


dbms_output.put_line(stuone。名字| || | stuone。爱好);
取stu_cur为stuone;
退出时未stu_cur %;
结束循环;
结束;


结果执行


SQL
*游标名称:sys_refcursor
*特别注意分配方式:
*不与上述重复内容叙述
* /
声明
stu_cur sys_refcursor;
stuone学生%ROWTYPE;
开始
-这个句子的赋值
打开stu_cur为SELECT * FROM学生;
读取指定式
取stu_cur为stuone;

dbms_output.put_line(stuone。名字| || | stuone。爱好);
取stu_cur为stuone;
退出时未stu_cur %;
结束循环;
结束;
/
杨过保护小女孩
Guo Jing Eighteen征服龙的阶段
政委看着那本小书。
刘子飞编程写代码
kawakaze编程代码
请练习魔术
观光旅游
令狐冲行侠仗义
魏被雪吸入
张武继的实践
芽浴
杰森毕生研究涂龙道
萧龙少女练《玉娘子心经》
欧阳锋对小书的阅读


补充循环条件


声明
stu_cur sys_refcursor;
学生stuone %ROWTYPE;
开始
打开stu_cur为SELECT * FROM学生;
取stu_cur为stuone;
注意循环条件的变化
-在循环中发现这种情况。
不同于过去无
而stu_cur %发现循环
dbms_output.put_line(stuone。名字| || | stuone。爱好);
取stu_cur为stuone;
结束循环;
结束;


-共同获取


公共模式
声明
光标myemp_cur是SELECT * FROM myemp;
v_myemp myemp %ROWTYPE;
开始
打开myemp_cur;
取myemp_cur为v_myemp;
而myemp_cur %发现循环
dbms_output.put_line(v_myemp。ename);
取myemp_cur为v_myemp;
结束循环;
结束;


-有效的批量收集


为、散装/ *收集
声明
光标myemp_cur
是选择*从myemp;
型myemp_tab是myemp %ROWTYPE表;
myemp_rd myemp_tab;
开始
打开myemp_cur;

取myemp_cur散装收集到myemp_rd限制20;
我在1 myemp_rd.count环..
dbms_output.put_line('name:| | myemp_rd(我)。Ename);
结束循环;
退出时未myemp_cur %;
结束循环;
结束;