日期:2014-05-17  浏览次数:20726 次

动态表名的truncate,求指导
SQL code

DECLARE
sqltext varchar(500); month varchar(5);
BEGIN
select to_char(to_char((trunc(sysdate, 'mm')- interval '2' month),'mm'), '09') into month  from dual;
sqltext:='truncate table XPrice_SRChannelHis_'||month;
execute immediate sqltext;
END;
/


我想在每个月的一号,删除前一个月的数据。考虑到数据量较大,目前系统采用了12张表保留数据,例如表名为XPrice_SRChannelHis_01等,后面的数字代表月份。老写不对,求指导

------解决方案--------------------
DECLARE
sqltext VARCHAR2(500);
tableIndex VARCHAR2(2);
BEGIN
IF (TO_CHAR(sysdate,'dd')= '01') THEN
sqltext :='truncate table XPrice_SRChannelHis_' || TO_CHAR(sysdate,'mm');
--execute immediate sqltext;
dbms_output.put_line (sqltext);
ELSE
dbms_output.put_line ('今天【' || TO_CHAR(sysdate,'dd') || '】还不是一号');
END IF;
END;

--结果
今天【05】还不是一号
或者是TRUNCATE TABLE 语句。