oracle 游标
2017-07-09 12:08
246 查看
游标最符合我们思维了,平时用惯了高级语言,一言不合就循环。根据我有限的写存储过程的心得,能不用游标就不用,数据库的强项在于表关联,过滤,sql写得好,也许根本不用游标进行循环,而速度则远远超过后者。
但有时候,好像还是要用游标。感觉oracle的游标与SQL SERVER大同小异。无非就是声明、开启、遍历、关闭,这几个步骤。套路如下:
这个边界,我总是搞不清楚,这里总结一下:
游标猜测是有个类似结尾符合的东西,指针来到这里,就是NOTFOUND了。而在此之前,即使是最后一条记录,指针的状态都是FOUND的。
OPEN游标,指针应该是在开启位置,没有啥FOUND或NOT FOUND的状态;FETCH开始后,指针才指向第一条记录,指针状态为FOUND,所以这个FOUND状态,不是指下一条记录可以FOUND,而是指当前指针为FOUND。继续遍历,到了结尾符合,就NOTFOUND了。
但有时候,好像还是要用游标。感觉oracle的游标与SQL SERVER大同小异。无非就是声明、开启、遍历、关闭,这几个步骤。套路如下:
create or replace procedure pro_test_cursor is begin --声明一个游标 DECLARE CURSOR c_id IS select id from( SELECT 1 id from dual union all SELECT 2 id from dual union all SELECT 3 id from dual) order by id; v_id number(1); begin --以下是两种遍历方式 --1、判断是否已经遍历完毕在前 open c_id;--开启游标 LOOP FETCH c_id INTO v_id; EXIT WHEN c_id%NOTFOUND; insert into tmp_cursor(id) values(v_id); END LOOP; CLOSE c_id;--关闭游标 --2、判断是否已经遍历完毕在后 open c_id; FETCH c_id INTO v_id; WHILE c_id%FOUND LOOP insert into tmp_cursor(id) values(v_id); FETCH c_id INTO v_id; END LOOP; CLOSE c_id; end; commit; end pro_test_cursor; /
这个边界,我总是搞不清楚,这里总结一下:
游标猜测是有个类似结尾符合的东西,指针来到这里,就是NOTFOUND了。而在此之前,即使是最后一条记录,指针的状态都是FOUND的。
OPEN游标,指针应该是在开启位置,没有啥FOUND或NOT FOUND的状态;FETCH开始后,指针才指向第一条记录,指针状态为FOUND,所以这个FOUND状态,不是指下一条记录可以FOUND,而是指当前指针为FOUND。继续遍历,到了结尾符合,就NOTFOUND了。
相关文章推荐
- Oracle 游标使用全解
- oracle pl/sql之游标变量
- Oracle笔记 九、PL/SQL 游标的使用
- Oracle中游标表达式Cursor操作符的运用
- Oracle游标的for与fetch
- oracle动态sql:存储过程中动态调用存储过程,并且动态调用的存储过程出参数游标
- Oracle 学习笔记11 —— 游标
- oracle游标学习
- oracle 游标的使用
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标、异常等
- 在Oracle过程中使用游标
- Oracle游标
- oracle之存储过程6- if、for、游标使用
- Oracle学习--->4、游标
- Oracle 游标使用全解
- Oracle 存储过程返回数据集(游标)
- Oracle中的游标(转)
- oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器
- Oracle 游标
- Oracle 游标使用全解