赛迪网 > IT技术 数据库 > DB2开发者园地
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

DB2中游标的使用方法以及存储过程的写法

发布时间:2008.07.16 04:43     来源:赛迪网    作者:韩丹

【赛迪网-IT技术报道】问题1:

什么时候才会发生not found异常 ,以及db2中sqlcode的值是如何变化的?

在db2中,一条select 语句也有可能发生not found异常,譬如:

declare sqlcode integer default 0;

declare sql_code integer default 0;

declare classCode varchar(40) ;

select app_class_code into classCode from kf_app_class where app_name='无效记录';

set sql_code=sqlcode;

如果此时没有检索到记录,那么sqlcode的值为100,有的话为0;

我们可以定义NOT FOUND 异常处理

declare sqlcode integer default 0;

declare sql_code integer default 0;

declare classCode varchar(40) ;

begin

declare continue handler for not found

begin

--注如果发生not found那么此时的sqlcode必定为100

set sql_code=sqlcode;/*在这里sqlcode的值为100;*/

--如果再次得到sqlcode的值那么它的值变为0

set sql_code=sqlcode;/*这里sqlcode变成了0,因为上一条语句执行成功了,那么sqlcode变成了0*/

end;

select app_class_code into classCode from kf_app_class where app_name='无效记录';

set sql_code=sqlcode;/*同理此时如果没有取到数据,那么会进declare continue handler ,返回后sqlcode的值也为0*/

end;

所以我们可以通过两种方法来捕获和处理not found

方法1:

begin

declare continue handler for not found

begin

--异常处理代码

end;

sql语句

end;

方法2:

begin

sql语句

if sqlcode=100 then

--异常处理代码

end if;

end;

问题2:

定义了游标,怎么fecth一条记录,怎么进行循环?

Q:定义了游标假设发生not found 异常,那么是在open cursorName的时候还是在fecth的时候发生异常?

A:检验游标中的数据是否取完或者有无记录,应该在fecth的时候,而不是发生在open cursorName的时候,

下面一个例子详细的说明了游标使用过程:

begin

declare sqlcode integer default 0;

declare app_code varchar(10);

declare cursor1 cursor for select app_code from kf_app_class ;

open cursor1;

cursorLoop:

loop

fecth cursor1 into app_code ;

if sqlcode=100 then leave cursorLoop;

end if;

end loop;

end;

sqlcode 可以直接用吗?

A:在db2中,如果要使用sqlcode那么必须在使用前declare;

譬如

declare sqlcode integer default 0;

if sqlcode =? then

end if;

附注

db2的其他异常处理

对应 oracle的 when other exceptions

declare exit handler for sqlwaring,sqlexcption

begin

--处理异常

end;

当程序执行exit handler异常处理后,那么会退出程序,不会在接着执行,也就是

declare exit handler for sqlwaring,sqlexcption

begin

--处理异常

end;

sql语句1;

sql语句2;

执行sql语句1发生异常,会进入 exit handler ,然后退出程序,不会在执行 sql语句2

(责任编辑:卢兆林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· SQL Server导出表到EXCEL文件的存储过程 (07-10) · 快速解决DB2创建存储过程时所遇到的错误 (05-27)
· DB2数据库创建存储过程时遇到的错误现象 (05-14) · 实例讲解存储过程的返回值与传出参数 (05-06)
· 存储过程中如何执行带输出参数的动态SQL (05-05) · 教你快速掌握一个交叉表的通用存储过程 (04-20)
· 在SQL Server 2005数据库中修改存储过程 (04-09) · 调用存储过程时注意要使用output做修饰符 (04-08)
· MySQL存储过程SAVEPOINT ROLLBACK to (04-06) · 教你通过任务和管道异步调用存储过程 (03-22)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 电子商务盈利新招:垂直化渠道管理新趋势
· 互联网加速蜕变 运营商进军搅动市场格局
· 08 IT技术风起云涌 专访 ITIL落地难在哪
· 视频加密保护解决方案 文档安全解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统