summer
作者summer·2010-07-18 22:53
系统工程师·

游标是什么?

字数 1569阅读 2766评论 0赞 0

什么是游标?何时需要游标?

 

游标(cursor 是用于操纵 DB2 查询返回的多行结果集的一种机制。有两种情况下需要使用游标:

查询返回不止一行。

带有 INTO 子句的 SELECT 语句很容易编写,但是这种语句只允许返回一行。在一条 SELECT 语句中,不存在允许直接处理多个行的子句,因此必须使用游标。

当您想要更新或删除一个或多个行,但是首先需要检查它们的内容时,需要使用游标。

更新或删除行的最简单的方法是使用像这样的一条语句:

UPDATE staff SET salary = salary * 1.10 WHERE  id = 100

or DELETE FROM staff WHERE id = 100.   

然而,这些叫做 searched 更新或删除的语句,不允许程序在更新或删除之前检查行的内容。这时可以考虑使用一个游标,结合使用一条 positioned 更新或删除语句。后者也称作 Update Where Current Of Delete Where Current Of,其中 Current Of 指的是游标当前所处在的那一行。

要使用游标,必须首先声明它,然后打开它,接着从中获取行,每次只能获取一行,再(可选地)更新或删除游标所处在的那一行,最后关闭该游标。在本节以及后面的小节中,我们将看到更多细节和例子。

游标支持如何随 DB2 接口而变化

 

游标支持和术语在各种 DB2 编程接口之间会有变化。让我们简略地看一下这些不同点。然后,在 操纵游标 中,我们将看一些关于嵌入式 SQL 的例子。

 

对游标的基本支持是通过 SQL 语言本身提供的,即通过 DECLARE CURSOROPENFETCH CLOSE 语句。

可以通过以下语法执行 positioned 更新和删除:

 Update [or Delete] ... Where Current Of <cursor name> 

各种不同的接口以各种不同的方式建立 SQL 游标支持。传统编程语言,例如 CC++ COBOL 提供了对在静态和动态嵌入式 SQL 中声明和使用游标的支持。只能单向地一次一行地对行进行处理。

SQL Procedure Language 对游标的支持很像 C,不过它添加了 WITH RETURN 子句,以支持将结果集返回给存储过程的调用者。

 

DB2 Call Level Interface (CLI)中,游标不是显式地声明的,但是 CLI 会在 SQLExecute() SQLExecDirect() 函数被调用时自动创建游标。CLI 提供了建立在游标支持之上的附加功能,例如向后滚动的功能,一次检索一组行的功能,以及按多行向前移动的功能。

 

JDBC 中,游标是在创建 ResultSet 对象时自动创建的。这里也提供了类似于 CLI 中提供的附加功能。

 

SQLJ 的游标支持实际上是 JDBC 中的游标支持与 SQL 中的游标支持的混合物,但是在 SQLJ 中,使用的是叫做 迭代器(iterator 的游标的等同物。

 

DB2 Command Line Processor (CLP) Control Center 之类的交互工具不允许直接使用游标。不过,这些工具本身会使用游标。当通过 CLP 执行一条 SELECT 语句,或者在 Control Center 中向一个表请求样本内容时,就要使用游标来返回行。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章


  • 评论 0 · 赞 0
  • DB2Copy1是什么?
    评论 0 · 赞 0
  • X社区推广