oracle存储过程切割日志表

CREATE OR REPLACE PROCEDURE proc_split_table
Authid Current_User
IS
   -- sms
   current_table_name1   VARCHAR2 (50);
   create_table_str1     VARCHAR2 (200);
   padding_table_str1    VARCHAR2 (200);
   del_tabledata_str1    VARCHAR2 (200);

   tmpvar                NUMBER;
BEGIN
   tmpvar := 0;
   current_table_name1 :=  'WHATYUSER_LOG4J_' || TO_CHAR (ADD_MONTHS (SYSDATE, -1), 'YYYYMM');
   create_table_str1 := 'CREATE TABLE ' || current_table_name1 || ' AS SELECT * FROM WHATYUSER_LOG4J WHERE 1=2';
   padding_table_str1 := 'INSERT INTO ' || current_table_name1 || ' SELECT * FROM WHATYUSER_LOG4J WHERE OPERATE_TIME BETWEEN TRUNC ( ADD_MONTHS (SYSDATE, -1), ''MONTH'') AND TRUNC ( ADD_MONTHS (SYSDATE, 0), ''MONTH'')';
   del_tabledata_str1 :=    'DELETE FROM WHATYUSER_LOG4J WHERE OPERATE_TIME BETWEEN TRUNC ( ADD_MONTHS (SYSDATE, -1), ''MONTH'') AND TRUNC ( ADD_MONTHS (SYSDATE, 0), ''MONTH'')';

   DBMS_OUTPUT.put_line ( create_table_str1 );
   DBMS_OUTPUT.put_line ( padding_table_str1 );
   DBMS_OUTPUT.put_line ( del_tabledata_str1 );
   EXECUTE IMMEDIATE create_table_str1;
   EXECUTE IMMEDIATE padding_table_str1;
   EXECUTE IMMEDIATE del_tabledata_str1;
   EXECUTE IMMEDIATE 'CREATE INDEX idx1_'||current_table_name1||' ON '||current_table_name1||' ( USERID )';
   EXECUTE IMMEDIATE 'CREATE INDEX idx2_'||current_table_name1||' ON '||current_table_name1||' ( BEHAVIOR )';
   EXECUTE IMMEDIATE 'CREATE INDEX idx3_'||current_table_name1||' ON '||current_table_name1||' ( STATUS )';
   EXECUTE IMMEDIATE 'CREATE INDEX idx4_'||current_table_name1||' ON '||current_table_name1||' ( LOGTYPE )';

   COMMIT;

EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      NULL;
   WHEN OTHERS
   THEN
       ROLLBACK;
       DBMS_OUTPUT.put_line ( '['||SQLCODE||']'||SQLERRM);
      RAISE;
END proc_split_table; 
/

 

将表WHATYUSER_LOG4J按照月份分割为WHATYUSER_LOG4J_201010这样的表

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值