什么是游标?何时需要游标?
游标(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 CURSOR、OPEN、FETCH 和 CLOSE 语句。
可以通过以下语法执行 positioned 更新和删除:
Update [or Delete] ... Where Current Of <cursor name>
各种不同的接口以各种不同的方式建立 SQL 游标支持。传统编程语言,例如 C、C++ 和 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 条评论