DEALLOCATE¶
说明¶
释放一个游标
参数¶
cursor_name
曾经定义过的游标名。
SILENTLY
当 DEALLOCATE 后加上 SILENTLY 参数时,若有错误的操作不会报错,也不做任何操作。在事务中若没有 SILENTLY 参数,当事务出错时,直接被退回,需要在结束事务后释放游标;若加上 SILENTLY 参数,则不 会报任何错误,事务也不会被退回。
注解
DEALLOCATE 是系统扩展。
DEALLOCATE 删除一个游标同时释放其所占用的系统资源。注意不要与DEALLOCATE PREPARE 释放查询计划相混淆。
示例¶
示例1: 释放游标
-- 清理环境
DEALLOCATE cur1;
DEALLOCATE PREPARE pp1;
-- 创建查询计划
PREPARE pp1 AS SELECT 111 FROM DUAL;
-- 创建游标
DECLARE cur1 CURSOR FOR pp1;/
-- 打开游标
OPEN cur1;
-- 获取数据
FETCH cur1;
?COLUMN?(int) |
-------------------
111 |
总数目:1
-- 释放游标
-- 游标处于打开状态,释放失败
DEALLOCATE cur1;
2019-11-18 16:28:40, ERROR, CMDS, 游标处于打开状态
-- 关闭游标
CLOSE cur1;
-- 释放游标
-- 游标处于关闭状态,释放成功
DEALLOCATE cur1;
-- 释放查询计划
DEALLOCATE PREPARE pp1;
示例2: 使用silently参数释放游标(安静模式)
-- 清理环境
DEALLOCATE cur2;
DEALLOCATE cur3;
-- 释放不存在的游标
DEALLOCATE c_notExist;
2019-11-18 16:28:40, ERROR, CMDS, 游标C_NOTEXIST不存在
-- 使用SILENTLY释放不存在的游标
DEALLOCATE SILENTLY c_notExist;
-- 开始一个事务
BEGIN;
-- 创建游标
DECLARE cur2 CURSOR FOR SELECT 222 FROM DUAL;/
-- 打开游标
OPEN cur2;
-- 获取数据
FETCH cur2;
?COLUMN?(int) |
-------------------
222 |
总数目:1
-- 释放处于打开状态下的游标
DEALLOCATE cur2;
2019-11-18 16:28:40, ERROR, CMDS, 游标处于打开状态
-- 结束事务
END;
-- 释放游标
DEALLOCATE cur2;
-- 开始一个事务
BEGIN;
-- 创建游标
DECLARE cur3 CURSOR FOR SELECT 333 FROM DUAL;/
-- 打开游标
OPEN cur3;
-- 获取数据
FETCH cur3;
?COLUMN?(int) |
-------------------
333 |
总数目:1
-- 使用SILENTLY释放处于打开状态下的游标
DEALLOCATE SILENTLY cur3;
-- 关闭游标
CLOSE cur3;
-- 释放游标
DEALLOCATE SILENTLY cur3;
-- 结束一个事务
END;