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

db2存储过程-剔除数据同时插入另一张表

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

 

db2存储过程-删除数据同时插入另一张表
各位好,有到了我的提问时间了,在这里请教各位一个问题,有A表,月数据量1W左右,现在要对A表进行数据备份操作(就是只保留一个月内的数据,其余的数据备份到B表中)
下面是我写的一个存储过程,请问有哪些地方需要修改。最后几行 我不知道是不是这样写的。请教请教!


/*
 *      按照年月备份性能数据表  
 *       例如: 
 *           table_name = td_pm_juniper_device
 *           endtime    = 2011-08-03 00:02:00   
 *           则创建 td_pm_juniper_device_201205 的备份表,月内的所有日数据
 *
 */
CREATE PROCEDURE "JUNIPER"."DAILY_DATA_BAK"
(IN TABLE_NAME VARCHAR(20),IN PARATION INT,IN ENDTIME TIMESTAMP)
LANGUAGE SQL
SPECIFIC P_DAILY_DATA_BAK
BEGIN
      /* 1.首先判断是否已经存在年月备份表 
       * 2.不存在 则创建备份表 
       * 3.将正式表中的过期的日数据放入备份表中,并删除正式表中的过期数据.
       */
       declare s_bakdate varchar;  -- 备份表后6位日期
       declare s_bakbbl varchar;   -- 备份表名称
       declare is_exist varchar;   -- 数据库是否已经存在备份表
       
       set s_bakdate = REPLACE(SUBSTR(TO_CHAR(ENDTIME,'YYYY-MM-DD HH24:MI:SS'),1,7),'-',''); -- 获取年份和月份 201205
       set s_bakbbl  = TABLE_NAME||s_bakdate; --备份表表名
       set is_exist = SELECT TBL.TABNAME FROM SYSCAT.TABLES TBL WHERE TBL.TABNAME = s_bakbbl; -- 查找数据库是否已经存在该表
       if(is_exist != s_bakbbl)
           then
               Create table s_bakbbl like TABLE_NAME;
       end if;
       insert into s_bakbbl select * from TABLE_NAME where partition = PARATION and time < timestamp(ENDTIME);
       delete from TABLE_NAME where partition = PARATION and time < timestamp(ENDTIME);
END;


--参考方法--
set is_exist = SELECT TBL.TABNAME FROM SYSCAT.TABLES TBL WHERE TBL.TABNAME = s_bakbbl; -- 查找数据库是否已经存在该表

这里可以换乘设置一个FLAG
declare is_exist integer default 0;
set is_exist = select count(*) from SYSCAT.TABLES TBL WHERE TBL.TABNAME = s_bakbbl; 
if (is_exist = 1)
....
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

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