DB2 9 使用拓荒(733 检讨)认证指南,第 2 部分: DB2 数据操作(6)
2011-03-06 23:51
417 查看
学习根柢根底观观点
操作游标
游标措置概述
在本节中,您将更进一步看到若安在嵌入式 SQL 使用次第中运用游标。异常,根柢根底的步骤照旧是声明、翻开、获取、更新/删除(可选)和封闭。
为了赞助看法游标的观观点,假定 DB2 构建一个了局表来寄存经过议定
在嵌入式 SQL 中声明游标
这条语句的运用概略有点令人隐晦,因为这条语句不是可尝试的。换句话说,这条语句是在嵌入式使用次第的预备阶段措置的,在次第尝试时代,当碰到
假设运用静态 SQL,那么
回页首
在嵌入式 SQL 中翻开游标
经过议定翻开一个游标,可以预备究诘了局会合的行,以供次第运用。open 利用还使游标的职位处所处于第一个了局行之前,不外只要尝试 fetch 下令时,才气会见那一行。
每每,open 利用将占去究诘尝试进程中的年夜部分时间,尤其是在有
回页首
在嵌入式 SQL 中获取游标
对游标尝试 fetch 将招致了局会合的下一行变成对次第可用,每每是将了局集各列中的值放入到宿主变量中。了局会合的第 n 列的值被放入 fetch 语句中的第 n 个宿主变量中。
比方,假设为
假设了局集列可觉无暇,那么应该再运用一个宿主标识符(null 指示符),DB2 将把一个负值存储在谁人变量中,以暗示前去的是一个 null 值。比方,将之前的例子改为
每每,会将 fetch 语句放在一个次第轮回中,该轮回直到
回页首
用游标更新和删除行
如前所述,可以对游标所指向的行进行 positioned 更新或删除。在更新或删除之前,必需尝试一条 fetch 语句,并且前去的
该代码从 STAFF 表中检索雇员信息,并批准更新雇员的部分。
固然这里没有浮现,但每每要运用次第逻辑控制轮回,使轮回在达到了局集的最初时终了,并且只更新某些行。
回页首
封闭游标
封闭游标可以释放游标的内部存储,并使游标不再可用。封闭游标的语法很是简朴:
默许环境下,封闭一个游标并不会释放它所持有的锁。要释放锁,还需添加
这使得 DB2 检讨检讨释放全数的读锁。可是,DB2 将保存用于更新行的锁,并且概略需求为其他利用或交互保存一些读锁。
当游标处于翻开形态时,可以在任何时分封闭它。也即是说,在封闭游标前,不需求获取整个了局集。游标封闭后,还可以再次翻开,就像之前没有被运用过一样。
版权声明:
原创作品,批准转载,转载时请务必以超链接体式格式标明文章 原始理由 、作者信息和本声明。否则将清查轨则责任。
操作游标
游标措置概述
在本节中,您将更进一步看到若安在嵌入式 SQL 使用次第中运用游标。异常,根柢根底的步骤照旧是声明、翻开、获取、更新/删除(可选)和封闭。
为了赞助看法游标的观观点,假定 DB2 构建一个了局表来寄存经过议定
SELECT语句检索到的全数行。游标经过议定标识或指向表中的当前行,使使用次第可以会见了局表中的行。当运用游标时,使用次第可以继续地从了局表中检索每一行,直到碰到 end-of-data 条件(也即是
NOT FOUND条件、
SQLCODE 100或
SQLSTATE 02000)。取决于满足搜刮条件的行的数目,尝试
SELECT语句失失落的了局集概略包括 0 行、1 行或更多的行。
在嵌入式 SQL 中声明游标
DECLARE CURSOR语句的语法很是简朴。上面是静态 SQL 的一个例子:
DECLARE C1 CURSOR FOR SELECT * FROM STAFF
这条语句的运用概略有点令人隐晦,因为这条语句不是可尝试的。换句话说,这条语句是在嵌入式使用次第的预备阶段措置的,在次第尝试时代,当碰到
DECLARE语句时,不会发生任何事件。全数事情都是在游标翻开后完成的。专心的要求即是,在源文件中,
DECLARE CURSOR语句要出现在
OPEN语句之前。而在异常的 C 函数中,乃至不需求放入如许的语句。在游标声明时地点的源文件中,每个游标的称呼必需是专心的。
假设运用静态 SQL,那么
DECLARE CURSOR语句会有有所不同。这里不再运用
SELECT语句的语法,而是运用一个语句名。这个语句名必需与预备相关的
SELECT语句时指定的称呼相婚配。比方:
EXEC SQL PREPARE STMT1 FROM :STRINGSTMT; EXEC SQL DECLARE C3 CURSOR FOR STMT1;
回页首
在嵌入式 SQL 中翻开游标
经过议定翻开一个游标,可以预备究诘了局会合的行,以供次第运用。open 利用还使游标的职位处所处于第一个了局行之前,不外只要尝试 fetch 下令时,才气会见那一行。
每每,open 利用将占去究诘尝试进程中的年夜部分时间,尤其是在有
ORDER BY或
GROUP BY子句的环境下就更是云云。
OPEN语句的语法很是简朴。要翻开一个名为 c0 的游标,可运用以下语句:
OPEN C0
回页首
在嵌入式 SQL 中获取游标
对游标尝试 fetch 将招致了局会合的下一行变成对次第可用,每每是将了局集各列中的值放入到宿主变量中。了局会合的第 n 列的值被放入 fetch 语句中的第 n 个宿主变量中。
比方,假设为
Select name, dept, id from staff声明一个游标
c0,那么语句
Fetch c0 into :hv1, :hv2, :hv3将把
name列的值放入
hv1,把
dept列的值放入
hv2,把
id列的值放入
hv3。
假设了局集列可觉无暇,那么应该再运用一个宿主标识符(null 指示符),DB2 将把一个负值存储在谁人变量中,以暗示前去的是一个 null 值。比方,将之前的例子改为
Fetch c0 into :hv1, :hv2 :hv2ind, :hv3,如许次第就可以晓得员工的部分能否为 null。
每每,会将 fetch 语句放在一个次第轮回中,该轮回直到
SQLCODE为 100 时才终了。此时,了局会合全数的行都已被获取。
回页首
用游标更新和删除行
如前所述,可以对游标所指向的行进行 positioned 更新或删除。在更新或删除之前,必需尝试一条 fetch 语句,并且前去的
SQLCODE不克不及为 100(或一个错误)。了局会合的每一行都可以以这种体例进行措置。上面是一个例子:
EXEC SQL DECLARE CURSOR C0 FOR SELECT NAME, SALARY FROM STAFF FOR UPDATE OF DEPT; EXEC SQL FETCH C0 INTO :HVNAME, :HVSAL; /* THERE MIGHT BE PROGRAM LOGIC HERE TO CHECK THE EMPLOYEE NAME AND SALARY */ /* AND ONLY EXECUTE THE UPDATE IF SOME CRITERIA APPLY */ EXEC SQL UPDATE STAFF SET DEPT = :NEWDEPT WHERE CURRENT OF C0;
该代码从 STAFF 表中检索雇员信息,并批准更新雇员的部分。
DECLARE CURSOR语句提供究诘,其中列出
name和
salary列作为被检索的列,并指出某些行中的
dept列可以更新。
FETCH语句将雇员和薪水值放入次第变量中。
UPDATE语句用于将之前获取的行中
dept列的值更新为次第变量
newdept中的值。
固然这里没有浮现,但每每要运用次第逻辑控制轮回,使轮回在达到了局集的最初时终了,并且只更新某些行。
回页首
封闭游标
封闭游标可以释放游标的内部存储,并使游标不再可用。封闭游标的语法很是简朴:
CLOSE C0
默许环境下,封闭一个游标并不会释放它所持有的锁。要释放锁,还需添加
WITH RELEASE子句:
CLOSE C0 WITH RELEASE
这使得 DB2 检讨检讨释放全数的读锁。可是,DB2 将保存用于更新行的锁,并且概略需求为其他利用或交互保存一些读锁。
当游标处于翻开形态时,可以在任何时分封闭它。也即是说,在封闭游标前,不需求获取整个了局集。游标封闭后,还可以再次翻开,就像之前没有被运用过一样。
版权声明:
原创作品,批准转载,转载时请务必以超链接体式格式标明文章 原始理由 、作者信息和本声明。否则将清查轨则责任。
相关文章推荐
- DB2 9 使用开辟(733 检验)认证指南,第 2 部分: DB2 数据操作(1)
- DB2 9 使用拓荒(733 测验)认证指南,第 9 部分: 用户定义的例程(4)
- DB2 9 使用拓荒(733 考试)认证指南,第 6 部分: .NET 编程(7)
- DB2 9 使用拓荒(733 检验)认证指南,第 4 部分: 嵌入式 SQL 编程(3)
- DB2 9 使用拓荒(733 考试)认证指南,第 4 部分: 嵌入式 SQL 编程(2)
- DB2 9 运用开辟(733 测验)认证指南,第 2 部分: DB2 数据操作(5)
- DB2 9 运用拓荒(733 考试)认证指南,第 2 部门: DB2 数据操作(3)
- DB2 9 使用拓荒(733 检修)认证指南,第 6 部分: .NET 编程(2)
- DB2 9 使用启示(733 检验)认证指南,第 3 部分: XML 数据把持(5)
- DB2 9 运用开辟(733 检讨)认证指南,第 1 部分: 数据库对象与编程编制(1)
- DB2 9 应用开荒(733 测验)认证指南,第 3 部分: XML 数据操作(1)
- DB2 9 使用启示(733 检验)认证指南,第 9 部分: 用户界说的例程(3)
- DB2 9 使用启示(733 查验)认证指南,第 2 局部: DB2 数据独霸(8)
- DB2 9 使用开发(733 考试)认证指南,第 2 局部: DB2 数据垄断(4)
- DB2 9 运用开发(733 测验)认证指南,第 3 部分: XML 数据操作(11)
- DB2 9 行使启示(733 检验)认证指南,第 2 部分: DB2 数据行使(2)
- DB2 9 使用开辟(733 测验)认证指南,第 1 部分: 数据库对象与编程方法(4)
- DB2 9 利用启示(733 测验)认证指南,第 7 部分: Java 编程(5)
- DB2 9 使用斥地(733 考试)认证指南,第 5 局部: CLI/ODBC 编程(3)
- DB2 9 使用斥地(733 测验)认证指南,第 1 局部: 数据库对象与编程措施(2)