Oracle游标
2016-04-20 23:26
447 查看
1 游标类型
静态游标
动态游标
系统游标
游标属性
2 循环方式
传统方式
FOR IN 方式
3 动态游标DEMO
4 系统游标DEMO
静态游标
CURSOR EMP_CURSOR IS SELECT * FROM EMP;
动态游标
-- 定义动态游标类型 TYPE CURSORTYPE IS REF CURSOR; -- 定义动态游标变量 V_CURSOR CURSORTYPE; -- 1 打开游标并指向数据集 OPEN V_CURSOR FOR SELECT * FROM EMP; -- 2 循环 ...
系统游标
-- 定义系统变量[除了定义的变量类型不一样,其他和动态游标都一致] V_CURSOR SYS_REFCURSOR;
游标属性
CURSOR_NAME%FOUND -- 有数据 CURSOR_NAME%NOTFOUND -- 无数据 CURSOR_NAME%ISOPEN -- 当前游标是否打开 CURSOR_NAME%ROWCOUNT -- 当前行号
2 循环方式
传统方式
DECLARE -- 定义游标 CURSOR EMP_CURSOR IS SELECT * FROM EMP; -- 定义 游标行类型 变量 EMP_REC EMP_CURSOR % ROWTYPE; BEGIN -- 循环游标内容 [传统方式] -- 1 打开游标 OPEN EMP_CURSOR; -- 2 循环游标 LOOP -- 3 取出游标当前指向的行数据 FETCH EMP_CURSOR INTO EMP_REC; -- 4 判断退出条件 EXIT WHEN EMP_CURSOR % NOTFOUND; -- 5 数据操作 DBMS_OUTPUT.put_line(EMP_REC.EMPNO || '--' || EMP_REC.ENAME); END LOOP; -- 关闭游标,释放资源 CLOSE EMP_CURSOR; END;
FOR IN 方式
DECLARE -- 定义游标 CURSOR EMP_CURSOR IS SELECT * FROM EMP; -- 定义 游标行类型 变量 -- EMP_REC EMP_CURSOR % ROWTYPE; BEGIN -- 循环游标内容 [FOR IN LOOP END LOOP 方式] -- 注意:1 不用打开游标 2 不用定义接受游标指向的行数据 -- 1 关键字 FOR IN FOR EMP_REC IN EMP_CURSOR LOOP -- 2 数据操作 DBMS_OUTPUT.put_line(EMP_REC.EMPNO || '--' || EMP_REC.ENAME); END LOOP; END;
3 动态游标DEMO
DECLARE -- 定义动态游标类型 TYPE CURSORTYPE IS REF CURSOR; -- 定义动态游标变量 V_CURSOR CURSORTYPE; -- 定义 行类型 变量 EMP_REC EMP % ROWTYPE; DEP_REC DEPT % ROWTYPE; BEGIN -- 1 打开游标并指向数据集 OPEN V_CURSOR FOR SELECT * FROM EMP; -- 2 循环游标 LOOP -- 3 取出游标当前指向的行数据 FETCH V_CURSOR INTO EMP_REC; -- 4 判断退出条件 EXIT WHEN V_CURSOR % NOTFOUND; -- 5 数据操作 DBMS_OUTPUT.put_line(EMP_REC.EMPNO || '--' || EMP_REC.ENAME); END LOOP; -- 6 关闭游标,释放资源 CLOSE V_CURSOR; -- 再次打开游标,重复操作另一数据集 OPEN V_CURSOR FOR SELECT * FROM DEPT; LOOP FETCH V_CURSOR INTO DEP_REC; EXIT WHEN V_CURSOR % NOTFOUND; DBMS_OUTPUT.put_line(DEP_REC.DEPTNO || '--' || DEP_REC.DNAME); END LOOP; /* -- 注意:动态游标类型不能使用 FOR IN 循环 FOR DEP_REC IN V_CURSOR LOOP DBMS_OUTPUT.put_line(DEP_REC.DEPTNO || '--' || DEP_REC.DNAME); END LOOP;*/ CLOSE V_CURSOR; END;
4 系统游标DEMO
DECLARE -- 定义系统变量 V_CURSOR SYS_REFCURSOR; -- 定义 行类型 变量 EMP_REC EMP % ROWTYPE; DEP_REC DEPT % ROWTYPE; BEGIN -- 1 打开游标并指向数据集 OPEN V_CURSOR FOR SELECT * FROM EMP; -- 2 循环游标 LOOP -- 3 取出游标当前指向的行数据 FETCH V_CURSOR INTO EMP_REC; -- 4 判断退出条件 EXIT WHEN V_CURSOR % NOTFOUND; -- 5 数据操作 DBMS_OUTPUT.put_line(EMP_REC.EMPNO || '--' || EMP_REC.ENAME); END LOOP; -- 6 关闭游标,释放资源 CLOSE V_CURSOR; -- 再次打开游标,重复操作另一数据集 OPEN V_CURSOR FOR SELECT * FROM DEPT; LOOP FETCH V_CURSOR INTO DEP_REC; EXIT WHEN V_CURSOR % NOTFOUND; DBMS_OUTPUT.put_line(DEP_REC.DEPTNO || '--' || DEP_REC.DNAME); END LOOP; /* -- 注意:动态游标类型不能使用 FOR IN 循环 FOR DEP_REC IN V_CURSOR LOOP DBMS_OUTPUT.put_line(DEP_REC.DEPTNO || '--' || DEP_REC.DNAME); END LOOP;*/ CLOSE V_CURSOR; END;
相关文章推荐
- 优化器的使用oracle ---explain plan
- TimesTen 与Oracle 数据库 12c的结合
- Oracle处于recover状态的数据文件是无法使用exp导出数据的
- Oracle-SQL04
- c# 使用OracleParameter,同时使用replace函数
- Oracle11完全卸载
- oracle oem无法打开 缘由;consoleorcl服务未打开
- oracle union 用法
- Oracle Minus
- oracle新建用户执行sql查询语句出现错误ORA-00942:表或视图不存在
- 恢复oracle数据到以前的某个时间点
- Oracle 修改密码 解锁
- Oracle Memory Management and HugePage (连载二)
- Oracle Memory Management and HugePage (连载一)
- ora-01017 和oracle database link
- Oracle ALL, ANY and SOME比较
- Oracle闪回设置
- RMAN异机恢复
- Oracle中to_number()函数的学习
- 一次归档故障的解决(ORA-00257错误)