oracle游标使用概述
显示游标(显式游标):在查询中定义的游标程序中定义的游标称为显示游标。
隐式游标(隐式游标)是在Oracle系统中使用时自动分配的游标,它用于非同步更新/删除语句中。
1。显示游标
1。使用步骤
(1)定义(2)开放(3)使用(4)关闭
2。使用演示
首先,创建测试表学生,脚本如下所示:
复制代码代码如下所示:
创建表(学生)
stunameVARCHAR2(10字节),
stunoVARCHAR2(4字节),
年龄号,
性别VARCHAR2(2个字符)
)
(1)。使用while循环处理游标
创建或替换程序proc_stu1作为
开始
-显示游标使用,while循环使用
声明
- 1。定义与一个叫cur_stu光标
cur_stu是光标
选择stuno,通过stuno从学生秩序stuname;
-定义变量并存储从游标中取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
开始
- 2。打开游标cur_stu
打开cur_stu;
- 3。将光标的当前行存储到变量中。
取cur_stu为v_stuno,v_stuname;
cur_stu %发现光标有数据线和继续运行而
环
打印结果
dbms_output.put_line(v_stuno | |->| | v_stuname);
-继续将光标中的当前行移到变量中
取cur_stu为v_stuno,v_stuname;
结束循环;
近4 cur_stu。关闭该光标
结束;
最后proc_stu1;
(2)。使用if,而不是while循环处理游标
创建或替换程序proc_stu2作为
开始
-显示光标的使用和使用,如果判断
声明
- 1。定义与一个叫cur_stu光标
cur_stu是光标
选择stuno,通过stuno从学生秩序stuname;
-定义变量并存储从游标中取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
开始
- 2。打开游标cur_stu
打开cur_stu;
- 3。将光标的当前行存储到变量中。
取cur_stu为v_stuno,v_stuname;
环
如果cur_stu %然后--如果游标cur_stu有数据线
打印结果
dbms_output.put_line(v_stuno | |->| | v_stuname);
-继续将光标中的当前行移到变量中
取cur_stu为v_stuno,v_stuname;
其他的
出口;
最后如果;
End loop;
近4 cur_stu。关闭该光标
结束;
最后proc_stu2;
(3)。使用for循环处理游标
创建或替换程序proc_stu3作为
开始
-显示游标的使用,用于循环
声明
--随着cur_stu名称定义光标
cur_stu是光标
选择stuno,通过stuno从学生秩序stuname;
开始
在cur_stu斯图
环
dbms_output.put_line(斯图。stuno | |->| |斯图。stuname);
环做为隐式检查未发现
结束循环;
-自动关闭光标
结束;
最后proc_stu3;
(4)。处理光标时常用的退出
创建或替换
proc_stu1_1作为程序
开始
-显示游标使用,在循环时使用退出
声明
- 1。定义与一个叫cur_stu光标
cur_stu是光标
选择stuno,通过stuno从学生秩序stuname;
-定义变量并存储从游标中取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
开始
- 2。打开游标cur_stu
打开cur_stu;
环
- 3。将光标的当前行存储到变量中。
取cur_stu为v_stuno,v_stuname;
退出时未cur_stu %;-光标数据线并继续运行
打印结果
dbms_output.put_line(v_stuno | |->| | v_stuname);
结束循环;
近4 cur_stu。关闭该光标
结束;
最后proc_stu1_1;
两。隐式游标
1。使用演示
创建或替换程序proc_stu4作为
开始
隐式游标的使用
更新学生设置stuname =stuno = '1104Yanguang zhang;
-如果更新不匹配,插入新记录
如果SQL %不那么
插入学生(stuno,stuname,年龄,性别)
值('1104 ',' Zhang Yanguang ',18,男);
最后如果;
最后proc_stu4;
2。解释
所有SQL语句在上下文区域都是可执行的,因为有一个光标指向上下文区域,也就是光标。
与实际游标不同的是,SQL游标是不需要打开和关闭SQL游标,而是执行更新,
删除是自动打开和关闭的。
上面的例子是决定一个新的记录需要通过插入SQL游标的属性为不确定的UPDATE语句的执行结果。