学习根柢根底观观点

操作游标

游标措置概述

在本节中,您将更进一步看到若安在嵌入式 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

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

  1. DB2 9 根蒂根基底细(730 考试)认证指南,第 6 局部: 数据并发性(5)

    锁和机能 锁兼容性 假设数据本钱上的一种锁形态允许在同一本钱上布置另一个锁,就感受这两种锁(或两种形态)是兼容的.每当一个事项持有数据本钱上的锁,而第二个事项哀告同一本钱上的锁时,DB2 数据库管理按 ...

  2. Informix IDS 11零碎治理(918检讨)认证指南,第 5 部门: 数据库效劳器使用(3)

    变动使用方式的用户权限 在 UNIX 和 Linux 平台上,以 root 或 informix 登录的用户可以变动数据库效劳器的使用方式.若是设置了 INF_ROLE_SEP 情况变量,则数据库效劳 ...

  3. DB2 9 使用拓荒(733 检验)认证指南,第 4 部分: 嵌入式 SQL 编程(3)

    构建与 DB2 停止交互的使用步伐 机关嵌入式 SQL 使用步伐 声明宿主变量 在前面,我们清楚明明到 DB2 Database Manager 依靠宿主变量在使用步谐和数据库之间挪动数据.我们还知道 ...

  4. DB2 9 运用开发(733 测验)认证指南,第 1 部分: 数据库工具与编程办法(1)

    操纵基本道理构建基本 级别: 低级 Clara Liu (claraliu@ca.ibm.com), DB2 产品操持人员, IBM 本文将介绍不同范例榜样的数据库工具及编程办法.这是包罗九篇教程的系 ...

  5. DB2 9 使用开辟(733 检验)认证指南,第 2 部分: DB2 数据操作(1)

    学习根基不美概念 级别: 中级 Sunil Sabat, 技术同盟司理, PeopleSoft 在本教程中,您将学习 DB2 数据库中数据操作的根基不美概念.这是分 9 部分的系列教程的第 2 部分, ...

  6. DB2 9 利用启示(733 测验)认证指南,第 7 部分: Java 编程(5)

    用 SQLJ 读取和更新数据 概述 SQLJ API 是 JDBC 的一个扩展,它支持 SQL 语句的静态实行.由于 DB2 支持 SQLJ,以是 Java 启示人员可以战胜 JDBC 的首要限制,即 ...

  7. DB2 9 底子(730 考试)认证指南,第 3 局部: 拜访 DB2 数据(3)

    建树第一个数据库 First Steps 在 DB2 的安顿进程中,会表示 First Steps 面板,它答运用户生成要操作的示例数据库: 选择 Database Creation 选项将表示一个附 ...

  8. db2 c语言,DB2数据库安全(二)——身份认证

    根据<循序渐进DB2>(牛新庄)第13章内容整理 身份认证(authentication) 1.什么时候进行身份认证 DB2身份认证 控制数据库安全性策略的以下方面:谁有权访问实例或数据库 ...

  9. OCM exam guide - OCM认证指南

    OCM exam guide - OCM认证指南 from http://www.itpub.net/thread-1044550-1-1.html 今天开始在OU参加为期四天的Oracle 10g ...

  10. OracleOCM认证指南

    转 Oracle OCM 认证指南https://blog.csdn.net/tianlesoftware/article/details/4896281  OCM考试全称为Oracle Certif ...

最新文章

  1. php mysql ajax日历记事本_php+mysql+jquery日历签到
  2. 第十七章 Python网络编程
  3. JAVA项目实训struts2_Java Web项目搭建过程记录(struts2)
  4. 【经典回放】多种语言系列数据结构算法:串(C版)
  5. 苏格拉底与失恋者的对话————最经典的失恋哲理 ...
  6. Linux 启动流程即init程序分析--1
  7. Axure RP 9格式刷使用说明【教程三】
  8. 我被老板炒鱿鱼了!因为我在IDE里看漂亮小姐姐跳舞!(IntelliJ IDEA插件开发之打造炫酷动态背景墙)
  9. 工具(五)--将doc格式文件批量转为docx
  10. JavaScript小白入门篇(二、高级语法之 BOM 详解)
  11. 四大检索工具 和 论文查找网址大全
  12. 开发一个App来为你的女神“化妆”!
  13. 深度学习(九) GAN 生成对抗网络 理论部分
  14. C中%g(G)g格式符用法详解
  15. Luogu P2708 硬币翻转 题解
  16. 创新PC应用、打通云端体验,360小程序引发SaaS软件变革
  17. golang日志库zerolog使用记录
  18. Educational Codeforces Round 95 (Rated for Div. 2)D. Trash Problem(权值线段树+离散化)
  19. js函数求两个数的和
  20. 赵钱孙李称体重,按照由大到小的顺序,打印出四人的姓氏的首字母和体重数(中间用空格隔开,每人一行)

热门文章

  1. 基于Golang的对象序列化的程序包开发——myJsonMarshal
  2. 2022-2028年中国氯磺化聚乙烯橡胶行业市场深度分析及未来趋势预测报告
  3. spring Ioc本质
  4. GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态
  5. super(Student,self).__init__()初始化的是什么东西?
  6. LeetCode简单题之唯一元素的和
  7. PyTorch 自动微分
  8. FFmpeg集成到GPU
  9. 低层级GPU虚拟内存管理引论
  10. [C] 层层递进——C语言实现广度优先搜索