很简单的问一下,100分,就是关于打开CURSOR后,如何在循环,可以处理每一条纪录?

Auto_And_Elec 2003-01-20 03:45:34
DB2 UDB 7.2 , Win2K

我在存储过程中用了Cursor, 当打开Cursor之后,不知道怎么循环去处理每一条纪录,参考书上讲的不多,我根据例子,SQLCODE可以作为一个循环的标记,但是如果用到了几个游标,那么又如何控制循环呢?
比如,代码如下

P1: BEGIN

DECLARE TName VARCHAR(50);
DECLARE Csr_Get Cursor For Select TABNAME From syscat.tables where Definer = 'DB2';
Open Csr_Get;
While (SQLCODE = 0) DO
FETCH Csr_Get INTO :TName;

DECLARE Csr_Format Cursor For Select TYPENAME INTO TypeName
From syscat.column Where TABNAME = TName;
Open Csr_Get;
--这下面又要循环处理每条纪录,但是不能用SQLCODE了,请问该用什么?

END P1



谢谢
...全文
24 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Forest_Law 2003-01-23
  • 打赏
  • 举报
回复
你去sqllib\smaple\里面看一下sql写的存储过程,十分详细的!
Auto_And_Elec 2003-01-21
  • 打赏
  • 举报
回复
3000sunqin(3000suqnin)大侠

为何我得SQLCODE还需要声明呢? 如果没有声明,则不能通过编译。

我如此声明:
Declare SQLCODE INT Default 0;

结构Open Cursor之后, SQLCODE的值也不变了,为何?
3000sunqin 2003-01-21
  • 打赏
  • 举报
回复
在SQL语句执行之后,尽快的检查SQLCODE就可以保证检查到该语句的SQLCode
3000sunqin 2003-01-21
  • 打赏
  • 举报
回复
对不起,看了你的程序觉得是不是抄错了?
While (SQLCODE = 0) DO
FETCH Csr_Get INTO :TName;

DECLARE Csr_Format Cursor For Select TYPENAME INTO TypeName
From syscat.column Where TABNAME = TName;
Open Csr_Get;//?
循环里面再去打开 Csr_Get,是不是错了,应该是Open Csr_Format吧?
程序语句的顺序是不是应该调整一下呢?
P1: BEGIN

DECLARE TName VARCHAR(50);
DECLARE Csr_Get Cursor For Select TABNAME From syscat.tables where Definer = 'DB2';
Open Csr_Get;
IF (SQLCODE<>0) GOTO ERROR1;
FETCH Csr_Get INTO :TName;
While (SQLCODE = 0) DO
DECLARE Csr_Format Cursor For Select TYPENAME
From syscat.column Where TABNAME = TName;
Open Csr_Format;
IF (SQLCODE<>0) GOTO ERROR2;
FETCH Csr_Format INTO :TypeName;
WHILE (SQLCODE=0) DO
......
FETCH Csr_Format INTO :TypeName;
......

FETCH Csr_Get INTO :TName;
......
END P1
3000sunqin 2003-01-21
  • 打赏
  • 举报
回复
好象可以用EOF;
我想象你这样使用嵌套游标的情况,一般都应该可以转换成使用一个游标的情况;
因为你使用的游标之间应该会有连接的方式,使用复杂一些的Sql语句应该可以实现

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧