Oracle中使用游标详解 一、使用游标 对于DML语句和单行select into ,oracle自动分配隐形游标。处理select返回多行语句,可以使用显式游标。 使用显示游标处理多行数据,也可使用SELECT..BULK COLLECT INTO 语句处理多行数据. 1.定义游标 cursor cursor_name is select_statement; 2.打开游标 执行对应的SELECT语句并将SELECT语句的结果暂时存放到结果集中. open cursor_name; 3.提取数据 打开游标后,SELECT语句的结果被临时存放到游标结果集中,使用FETCH语句只能提取一行数据 通过使用FETCH..BULK COLLECT INTO语句每次可以提取多行数据 1 2 3 (1)游标中使用fetch..into语句:只能处理一行数据,除非用循环语句 1 2 3 4 5 6 7 8 9 10 11 12 或 1 2 3 4 5 6 7 8 9 10 11 12 (3)基于游标定义记录变量 1 2 3 4 5 6 7 8 9 10 11 4.关闭游标 1 5.游标属性 用于返回显示游标的执行信息,包括%isopen,%found,%notfound,%rowcount %isopen:确定游标是否打开 %found:检查是否从结果集中提取到了数据 %notfound:与%found行为相反。 %rowcount:返回当前行为止已经提取到的实际行数 no_data_found和%notfound的用法是有区别的,小结如下1)SELECT. . . INTO 语句触发 no_data_found; 2)当一个显式光标(静态和动态)的 where 子句未找到时触发 %notfound; 3)当UPDATE或DELETE语句的where 子句未找到时触发 sql%notfound; 4)在光标的提取(Fetch)循环中要用 %notfound 或%found 来确定循环的退出条件,不要用no_data_found。 6.参数游标 注意:定义参数游标时,游标参数只能指定数据类型,而不能指定长度。 1 2 3 4 5 6 7 8 9 10 11 12 二、for循环遍历,实现遍历游标最高效方式。 使用FOR循环时,ORACLE会隐含的打开游标,提取游标数据并关闭游标。 每循环一次提取一次数据,在提取了所有数据后,自动退出循环并隐含的关闭游标。 1.使用游标FOR循环 1 2 3 4 5 6 7 8 2.在游标FOR循环中直接使用子查询 1 2 3 4 5
三、使用游标更新或删除数据 要通过游标更新或删除数据,在定义游标时必须要带有FOR UPDATE子句 1 for update子句:用于在游标结果集数据上家行共享锁,防止其他用户在相应行执行DML操作 of子句:确定哪些表要加锁,没有OF子句,则在所引用的全部表上加锁 nowait子句:用于指定不等待锁 必须在UPDATE后DELETE语句中引用WHERE CURRENT OF子句 update table_name set column=.. where current of cursor_name; delete table_name where current of cursor_name; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 四、通过bulk collect减少loop处理的开销 将查询结果一次性加载到集合中,而不是一条一条的加载。 (1)在显示游标中,使用FETCH..BALK COLLECT INTO语句提取所有数据 1 2 3 4 5 6 7 8 9 10 11 12 (2)游标中使用FETCH..BULK COLLECT INTO ..LIMIT语句提取部分数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 五、使用游标变量 PL/SQL的游标变量中存放着指向内存地址的指针. 1.游标变量使用步骤 包括定义游标变量,打开游标,提取游标数据,关闭游标等四个阶段 1.1定义ref cursor类型和游标变量 1 2 3 当指定RETURN子句时,其数据类型必须是记录类型,不能在包内定义游标变量 1.2打开游标 1 1.3提取游标数据 1 2 3 1.4关闭游标变量 1 2.游标变量使用示例 1、在定义FEF CURSOR类型时不指定RETURN子句 在打开游标时可以指定任何的SELECT语句 1 2 3 4 5 6 7 8 9 10 11 12 13 2、在定义REF CURSOR类型时指定RETURN子句 在打开游标时SELECT语句的返回结果必须与RETURN子句所指定的记录类型相匹配. 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/20490.html