分类: Sybase
2008-04-11 11:03:52
来源:赛迪网 作者:limeinan |
游标定位
当游标打开之后,它位于结果集的第一行之前。您可以将游标移到以查询结果的开头或结尾作为参照的一个绝对位置,或者移到以当前游标位置作为参照的一个相对位置。如何更改游标位置以及可以执行什么操作的细节是受编程接口约束的。
游标中可读取的行位置数受整数的大小制约。您最多可以读取到第2147483646 行,这个数字比可以在整数中保存的值小 1。在使用负数(从末尾开始计算行数)时,您最多可以读取到的行数比整数中可保存的最大负值大 1。
您可以使用特殊定位的更新操作和删除操作来更新或删除位于游标当前位置的行。如果游标位于第一行之前或最后一行之后,那么将返回 " 没有当前的游标行 " 错误。
游标定位问题
对敏感性未定型游标的插入和某些更新会导致游标定位发生问题。
Adaptive Server Anywhere 不将插入的行放在游标内可预测的位置,除非在 SELECT 语句上有 ORDER BY 子句。在有些情况下,插入的行要等到关闭并再次打开游标后才会出现。
使用 Adaptive Server Anywhere 时,如果需要创建工作表来打开游标,就会发生这种情况 UPDATE 语句可能导致行在游标中移动。如果游标有使用现有索引的ORDER BY 子句 (不必创建工作表),会发生这种情况。使用 STATIC SCROLL 游标会缓解这些问题,但需要更多的内存和处理。
在打开时配置游标
您可以在打开游标时配置游标行为的以下几个方面:
隔离级别 您可以将游标上操作的隔离级别显式设置为不同于事务的当前隔离级别。为此,请设置 ISOLATION_LEVEL 选项。
保存
缺省情况下,嵌入式 SQL 中的游标在事务结束时关闭。游标 WITH HOLD 打开之后,您可以让它保持打开状态,直到连接结束,或者,直到您将它显式关闭。缺省情况下, ODBC、 JDBC 和 Open Client 在事务结束时会让游标保持打开状态。
使用游标处理查询的结果集的最简单方式是在结果集的所有行中循环,直到没有行为止。
在结果集的行中循环:
1.声明和打开游标 (嵌入式 SQL),或者执行返回结果集的语句(ODBC、 JDBC、 Open Client)或 AsaDataReader 对象(ADO.NET)。
2.继续读取下一行,直到您得到 " 未找到行 " 错误。
3.关闭游标。
此操作的步骤 2 如何执行取决于您使用的接口。例如:
ODBC SQLFetch、 SQLExtendedFetch 或 SQLFetchScroll 让游标前进到下一行并返回数据。
ADO.NET 使用 AsaDataReader.NextResult 方法。嵌入式 SQLFETCH 语句执行相同的操作。
JDBC ResultSet:对象的 next 方法让游标前进并返回数据。
Open Client ct_fetch:函数将游标前进到下一行并返回数据。 |