动态表名的truncate,求指导

baiding_bd 2012-04-05 10:30:37

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等,后面的数字代表月份。老写不对,求指导
...全文
61 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiding_bd 2012-04-05
  • 打赏
  • 举报
回复
哎,傻了。我只是点了下,看pl/sql没报错就给分了。1楼的回复根本不是我要的
ssqtjffcu 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
原来执行sql语句是用dbms_output.put_line (sqltext);而不是execute immediate sqltext;的呀,学习了。
[/Quote]
dbms_output.put_line (sqltext); -- 这个是打印sqltext变量
execute immediate sqltext --这个是执行sqltext变量保存的语句
ssqtjffcu 2012-04-05
  • 打赏
  • 举报
回复
老写不对?报什么错,看上去好像没问题

baiding_bd 2012-04-05
  • 打赏
  • 举报
回复
原来执行sql语句是用dbms_output.put_line (sqltext);而不是execute immediate sqltext;的呀,学习了。
hupeng213 2012-04-05
  • 打赏
  • 举报
回复
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 语句。
hupeng213 2012-04-05
  • 打赏
  • 举报
回复
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;

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

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧