下面是我写的一个存储过程,请问有哪些地方需要修改。最后几行 我不知道是不是这样写的。请教请教!
/*
* 按照年月备份性能数据表
* 例如:
* 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;
2 个解决方案
#1
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)
....
这里可以换乘设置一个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)
....
#2
谢谢你的提议, 同时再问一下, 我代码最后两句 insert into...和delete...from 是否要进行事务控制?
#1
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)
....
这里可以换乘设置一个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)
....
#2
谢谢你的提议, 同时再问一下, 我代码最后两句 insert into...和delete...from 是否要进行事务控制?