DB2 9 使用拓荒(733 检讨)认证指南,第 2 部分: DB2 数据操作(6)

news/2024/9/22 11:31:22

学习根柢根底观观点
developerWorks








操作游标

游标措置概述

在本节中,您将更进一步看到若安在嵌入式 SQL 使用次第中运用游标。异常,根柢根底的步骤照旧是声明、翻开、获取、更新/删除(可选)和封闭。

为了赞助看法游标的观观点,假定 DB2 构建一个了局表来寄存经过议定 SELECT 语句检索到的全数行。游标经过议定标识或指向表中的当前行,使使用次第可以会见了局表中的行。当运用游标时,使用次第可以继续地从了局表中检索每一行,直到碰到 end-of-data 条件(也即是 NOT FOUND 条件、SQLCODE 100SQLSTATE 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 BYGROUP 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 语句提供究诘,其中列出 namesalary 列作为被检索的列,并指出某些行中的 dept 列可以更新。FETCH 语句将雇员和薪水值放入次第变量中。UPDATE 语句用于将之前获取的行中 dept 列的值更新为次第变量 newdept 中的值。

固然这里没有浮现,但每每要运用次第逻辑控制轮回,使轮回在达到了局集的最初时终了,并且只更新某些行。





回页首



封闭游标

封闭游标可以释放游标的内部存储,并使游标不再可用。封闭游标的语法很是简朴:

CLOSE C0


默许环境下,封闭一个游标并不会释放它所持有的锁。要释放锁,还需添加 WITH RELEASE 子句:

CLOSE C0 WITH RELEASE


这使得 DB2 检讨检讨释放全数的读锁。可是,DB2 将保存用于更新行的锁,并且概略需求为其他利用或交互保存一些读锁。

当游标处于翻开形态时,可以在任何时分封闭它。也即是说,在封闭游标前,不需求获取整个了局集。游标封闭后,还可以再次翻开,就像之前没有被运用过一样。




版权声明: 原创作品,批准转载,转载时请务必以超链接体式格式标明文章 原始理由 、作者信息和本声明。否则将清查轨则责任。

转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/06/1972868.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉|针孔成像,相机内外参及相机标定,矫正的重要性

计算机视觉读书笔记|相机内外参及相机标定,矫正的重要性 这篇博客将介绍针孔成像,透镜(弥补了针孔成像曝光不足成像速度慢的缺点,但引进了畸变,主要是径向畸变和切向畸变,径向畸变主要是离中心越远越弯曲&…

计算机视觉|投影与三维视觉

这一篇将学习投影与三维视觉,沿用上一篇 计算机视觉|针孔成像,相机内外参及相机标定,矫正的重要性 摄像机内参数矩阵M、畸变参数、旋转矩阵R、平移向量T以及但影响矩阵H。回顾放射和投影变换,并使用POSIT算法从一幅图像中查找获得…

3. 使用PyTorch深度学习库训练第一个卷积神经网络CNN

这篇博客将介绍如何使用PyTorch深度学习库训练第一个卷积神经网络(CNN)。训练CNN使用 KMNIST 数据集(MNIST digits数据集的替代品,内置在PyTorch中)识别手写平假名字符(handwritten Hiragana characters&am…

小手段:开启 GNOME 的窗口分组效果

Toy Posted in Tips用过 Windows XP 的伴侣除夜要都晓得它有一项分组雷同义务栏按钮的效果,该效果主动将同类窗口的义务按钮折叠为一个单独的按钮,从而无效处置义务栏的窗口拥堵后果。其实,在 Linux 的 GNOME 桌面情况中也有雷同的效果──窗…

Tile Racer — 3D 赛车游戏

Toy Posted in Tile Racer 是一款可免用度于 Linux 及 Windows 平台的 3D 赛车游戏。它不只具有十分逼真的效果,并且包罗用来创设新 Maps 的赛道编辑器。玩家可置身于游戏之中足够觉获得赛车的快乐喜爱。Tile Racer 此后最新版本为 0.6,你可以从这里下载…

使用Python爬取分析腾讯新冠疫情数据,并对json格式进行校验

写这篇博客源于 博友的提问 由于禁止反爬,所以返回的json格式是错误的,因此没法直接转换。 可以观察规律进行json串格式校正。json格式需要 [], {} [{}] 成对存在。 1. 效果图 简单看一下,格式是否正确;可以看到返回值中 {} […

Python 有序排列permutations,无序组合combinations,阶乘factorial函数

写这篇博客源于博友的提问:将介绍使用Python 进行 有序排列,无序组合排列,阶乘的函数。 1. 问题及解决 问题: 40个球,四个盒子,一个盒子十个球搞排列组合,每个球和盒子都是不可分辨的&#xf…

中国挪动批改KPI查核制度将器重客户满意度

飞象网讯(魏德龄/文)记者从相关动静处置解到,中国挪动2011年的KPI查核将大幅缩减,并消除数据业务、TD用户数和集体客户等目标,重点调高了利润和客户满意度目标,并加入了相关EVA财务目标查核。去年&#xff…