Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103593346
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-11 11:04:24

 来源:赛迪网    作者:limeinan

多行读取

某些接口提供了一次将多行读取到数组中的下几个字段的方法。通常,您执行单独的读取操作越少,服务器必须响应的单个请求也就越少,性能也就越好。修改后的检索多行的 FETCH 语句有时也称为宽读取。使用多行读取的游标有时称为块状游标或胖游标。

使用多行读取

在 ODBC 中,您可以通过设置 SQL_ROWSET_SIZE 属性来设置每一次调用 SQLFetchScroll 或 SQLExtendedFetch 返回的行数。

在嵌入式 SQL 中, FETCH 语句使用 ARRAY 子句控制一次读取的行数。

Open Client 和 JDBC 不支持多行读取。但它们可以使用预读。

用可滚动游标读取

ODBC 和嵌入式 SQL 提供了使用可滚动游标和动态可滚动游标的方法。

这些方法使您能够一次向前移动多行,或在结果集中向后移动。

JDBC 和 Open Client 接口不支持可滚动游标。

预读不适用于可滚动操作。例如,读取相反方向中的行并不能预读前面的多行。

通过游标修改行

游标的用途不仅仅是读取查询的结果集。您还可以在处理游标时修改数据库中的数据。这些操作通常称为定位插入、更新和删除操作,或者如果操作是插入操作,则称为 PUT 操作。

并非所有的查询结果集都允许定位更新和删除。如果您在不可更新的视图上执行查询,则基表不会发生更改。此外,如果查询涉及连接,则必须指定您希望从哪一个表删除,或者您希望更新哪些列,何时执行操作。

只有在表中的某些非插入列允许 NULL 或有缺省值的情况下,才能通过游标执行插入。

将多行插入对值敏感的游标 (键集驱动的游标)时,新插入的行出现在游标结果集的末尾处。即使这些行与查询的 WHERE 子句不匹配,或者 ORDER BY 子句通常将它们放置在结果集的其它位置,这些行也会出现在最后。此行为与编程接口无关。例如,当使用嵌入式 SQL PUT语句或 ODBC SQLBulkOperations 函数时就会是这样。通过选择游标中最后一行可以找到最后插入行的自动增量列的值。例如,在嵌入式 SQL中,可以使用 FETCH ABSOLUTE -1 cursor-name 来获取该值。此行为的

结果是,对值敏感的游标的首次多行插入的代价会很大。

ODBC、嵌入式 SQL 和 Open Client 允许使用游标进行数据修改,JDBC 1.1 却不允许。对于 Open Client,您可以删除和更新行,但您只能在单表查询上插入行。

可以从哪个表中删除行?

如果您试图通过游标执行定位删除,那么请按如下所示的方法确定从哪个表删除行:

1. 如果 DELETE 语句中未包括 FROM 子句,那么游标必须只在单个表上。

2. 如果游标用于连接查询 (包括使用包含连接的视图),则必须使用FROM 子句。只会删除指定表的当前行,连接中涉及的其它表不会受到影响。

3. 如果包括了 FROM 子句,但未指定表所有者,那么指定表为第一个与其值相匹配的相关名。

4. 如果给出了相关名,就用该相关名来确定指定表的名称。

5.如果没有给出相关名,那么指定表的名称必须是游标中可明确标识的表名。

6.如果给出的 FROM 子句中指定了表的所有者,那么指定表的名称必须像游标中的表名一样是明确可标识的。

7. 定位 DELETE 语句可以使用于在视图上打开的游标,只要视图是可更新的即可。

取消游标操作

您可以通过接口函数取消请求。从 Interactive SQL 中,您可以通过按下工具栏上的 " 中断 SQL 语句 " 按钮 (或者通过从 SQL 菜单中选择 " 停止 ")来取消请求。

如果您取消正在执行游标操作的请求,则游标的位置是不确定的。取消请求之后,您必须按照其绝对位置给游标定位,或者将它关闭。

阅读(480) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~