欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

请问一个简单的程序块

更新时间: 2014-01-05 02:23:01 责任编辑: Author_N1

 

请教一个简单的程序块
刚学习DB2,想写以下代码:
意图:
轮训系统表syscat.tables 各个表在数据库各个节点的分步情况。将结果插入到自己建好的一张表:
tmp_test


我自己写的一段代码:
begin 

declare cursor1 cursor with hold for select tbspace,tabname from syscat.tables where tbspace like 'TBS_0%'order by tabname;
select count(*) into tab_num from syscat.tables where tbspace like 'TBS%';
 open cursor1;
 set cnt_1=1; 
 fetch cursor1.tabname into TABLE_NAME;
 fetch cursor1.tbspace into TABLE_SPC;
  while cnt_1 < tab_num+1  
 insert into tmp_test(tbspace,tabname,nodid,lszkb,pszkb,iszkb) 
  select '''||TABLE_SPC||''','''||TABLE_NAME||''',DBPARTITIONNUM,SUM(DATA_OBJECT_L_SIZE) lszkb,                           
SUM(DATA_OBJECT_P_SIZE) pszkb, SUM(INDEX_OBJECT_P_SIZE) iszkb 
from  TABLE(SYSPROC.ADMIN_GET_TAB_INFO_V95(''XY'','''||TABLE_NAME||''')) AS T
GROUP BY '''||TABLE_SPC||''','''||TABLE_NAME||''',DBPARTITIONNUM ;
commit;
  end while; 
  close cursor1;
end

测试无法通过。。

请论坛中各位前辈指教。。。谢谢!
--参考方法--
亲,你写的代码中,有明显的4个错误:
1、fetch from 语句要加在while循环中,要不你循环多次取得都是同一个表的信息(要加from);
2、单引号的书写,如果你要想在查询的结果中增加一个单引号,那么你就得写两个单引号;
3、计数器不自增,就是死循环;
4、while后要加do关键字。
还有ADMIN_GET_TAB_INFO_V95这个存储过程,是V9.5特有的吗。

试一下以下的代码:

begin 

declare cursor1 cursor with hold for select tbspace,tabname from syscat.tables where tbspace like 'TBS_0%' order by tabname;
select count(*) into tab_num from syscat.tables where tbspace like 'TBS%';
 open cursor1;
 set cnt_1=1; 
 
  while cnt_1 < tab_num+1  
do

 fetch from cursor1 into TABLE_NAME, TABLE_SPC;
 
 insert into tmp_test(tbspace,tabname,nodid,lszkb,pszkb,iszkb) 
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:23:01
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/9118/
本文WWW.DOC100.NET DOC100.NET版权所有。