DEALLOCATE

说明

释放一个游标

语法

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;