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 语句。
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;
我只是为了方便查看结果,把本该执行的语法改成输出语法了。
改过来试试吧。