51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> oracle >> 文章正文

动态表名的truncate

更新时间:2012-4-5:  来源:51代码网

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;

我只是为了方便查看结果,把本该执行的语法改成输出语法了。
改过来试试吧。

赞助商链接
推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |