【翻译】甲骨文游标详细说明

  

,,这篇文章是选取官方文档的部分章节翻译过来的,去除了原文中的例子,并在结尾补充了几个例子。有兴趣的朋友可以点击文章末尾的连接去阅读官方文档。

<强>一、游标的定义

,,游标是指向专用SQL区域的指针,该区域存储有关处理特定选择或DML语句的信息。本章解释的游标是会话游标。会话游标存在于会话中直到会话结束。由PL/SQL创建和管理的游标称为隐式游标,由用户创建和管理的游标称为显式游标。你可以通过游标的属性获取任意会话游标的相关信息。通过查询动态性能视图V OPEN_CURSOR美元,可以列出当前已经打开和解析的游标。

<强>二、隐式游标

,,每次执行选择或DML操作时,都会生成隐式游标。用户不能控制隐式游标,但可以通过游标的属性获取游标的信息。

,,隐式游标属性的语法是SQLattribute(因此隐式游标也通常叫做SQL游标).SQLattribute总是指向最近运行的选择或DML语句。如果最近没有运行这样的语句,则属性返回零。

,,当语句运行结束时,隐式游标关闭,但是它的属性会被保留到另一条选择或DML语句执行。最近的语句运行的结果可能属于不同的值,如果要保留属性值供以后使用,可以将其保存在本地变量中。另外,其他的操作,如子程序的调用,可能在你测试之前改变属性值。

隐式游标的属性有以下几种:

属性值说明备注SQL % ISOPENFALSE隐式游标总是在与其相关联的语句结束之后关闭,因此总是返回假
SQL % FOUNDNULL没有执行选择或DML操作
TRUEselect语句返回一行或多行或者DML操作影响了一行或者多行
假其他情况
SQL % NOTFOUNDNULL没有执行选择或DML操作在SELECT into中无用,没有值时会报no_data_found的错误;有值时验证已经没有意义.TRUEselect语句返回一行或多行或者DML操作影响了一行或者多行
假其他情况
SQL % ROWCOUNTNULL没有执行选择或DML操作SELECT into中返回多行时会报too_many_data的错误,并且返回1。数值返回的数值表示选择返回了多少行以及DML操作影响了多少行
SQL % BULK_ROWCOUNT数值
原则语句完成后,从隐式游标属性SQL % BULK_ROWCOUNT获取每个DML语句影响的行数. SQL % BULK_EXCEPTIONS

原则语句完成后,如果执行期间有异常生成,会将异常数据保存在SQL % BULK_EXCEPTIONS中。

<强>三、显式游标

,,显式游标由用户创建并管理。用户在使用显式游标之前必须声明和定义游标名称并将其与查询相关联(通常,查询会返回多行),然后用户可以通过以下方式处理查询结果集:

,,使用打开命令打开游标,使用取获取行,使用密切关闭游标;

,,与隐式游标不同,可以通过名称引用显示游标或游标变量,因此,显式游标或游标变量称为命名游标。

<强> 3.1声明和定义显式游标

,,用户可以首先声明一个显式游标,然后在同一个块,子程序或包中定义它,或者同时声明和定义它。

只声明游标,具有如下的语法:

光标cursor_name [parameter_list]返回return_type;

声明游标并定义游标的语法:

光标cursor_name [parameter_list][返回return_type], select_statement;

声明显式游标的例子:

声明   ,光标c1返回部门% ROWTYPE;,,——声明C1   ,

光标选择employee_id c2, job_id, salary ——声明并且定义c2 

从员工   ,,

工资比;2000;      ,

光标c1返回部门% ROWTYPE IS ——定义c1,——重复返回type 

SELECT * FROM departments 

department_id=110;      ,

光标c3返回位置% ROWTYPE;,,,——声明c3      ,

光标c3,,,,,,,,,,——定义c3,   ——忽略返回类型,,,

SELECT *的位置,,,,,,,,,

country_id=JP,,

开始   ,零;

结束;/

<强> 3.2打开和关闭游标

,,声明和定义显式游标后,可以使用开放语句打开它,您使用亲密语句关闭一个打开的显式游标,从而允许重用其资源。关闭游标后,无法从其结果集中提取记录或引用其属性。

,,用户可以重新打开一个已经关闭的游标。游标在重新打开之间必须要被关闭,否则,PL/SQL会引发预定义异常CURSOR_ALREADY_OPEN。

<强>

,, into_clause是一个变量列表或单个记录变量。对于查询返回的每个列,变量列表或记录必须具有对应的类型兼容变量或字段。%和% ROWTYPE属型性可用于声明变量和记录以在获取语句中使用.FETCH语句检索结果集的当前行,将该行的列值存储到变量或记录中,并将光标前移到下一行,通常,在循环语句中使用获取语句,当获取语句用完行时退出。要检测此退出条件,请使用游标属性% NOTFOUND。因为当获取语句不返回任何行时,PL/SQL不会引发异常。

【翻译】甲骨文游标详细说明