度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 667|回复: 4
打印 上一主题 下一主题

[分享] oracle分区表按时间自动创建

[复制链接]

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
跳转到指定楼层
楼主
发表于 2020-4-10 17:10:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
表分区是一种思想,分区表示一种技术实现。当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO。oracle分区表是oracle数据库提供的一种表分区的实现形式。表进行分区后,逻辑上仍然是一张表,原来的查询SQL同样生效,同时可以采用使用分区查询来优化SQL查询效率,不至于每次都扫描整个表。
根据年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
根据月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
根据天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))
根据时分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})
此时已经有普通表了,我创建了含相同字段的分区表,把数据导入到分区表中,再把原表删掉。
  1. -- Create table(WMS_OPERATION_RECORD)
  2. create table DPHOMEWMS.WMS_OPERATION_RECORD_TMP
  3. (
  4.   ID             NUMBER(19) not null,
  5.   WAREHOUSE_ID   NUMBER(19),
  6.   ASN_ID         NUMBER(19),
  7.   PICK_TICKET_ID NUMBER(19),
  8.   RELATION_CODE  VARCHAR2(50),
  9.   OPERATION_TYPE VARCHAR2(50),
  10.   OPERATION_ID   NUMBER(19),
  11.   OPERATION_NAME VARCHAR2(50 CHAR),
  12.   OPERATION_TIME TIMESTAMP(6),
  13.   STATUS         VARCHAR2(10),
  14.   TYPE           VARCHAR2(10),
  15.   COUNTS         NUMBER(10)
  16. )tablespace DPHOMEWMS_DATA
  17. PARTITION BY RANGE (OPERATION_TIME) interval (numtoyminterval(1, 'month'))
  18. STORE IN (DPHOMEWMS_DATA)
  19. (
  20.   partition OPERATION_RECORD_P01 values less than (TIMESTAMP' 2017-05-08 00:00:00')
  21.   tablespace DPHOMEWMS_DATA
  22. );
  23. -- Add comments to the columns
  24. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.WAREHOUSE_ID
  25.   is '仓库id';
  26. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.ASN_ID
  27.   is '收货单id';
  28. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.PICK_TICKET_ID
  29.   is '发货单ID';
  30. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.RELATION_CODE
  31.   is '关联单据号(收货单或发货单的code)';
  32. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_TYPE
  33.   is '操作类型';
  34. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_ID
  35.   is '操作人ID';
  36. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_NAME
  37.   is '操作人名称';
  38. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_TIME
  39.   is '操作时间';
  40. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.STATUS
  41.   is '状态';
  42. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.TYPE
  43.   is '明细或者统计次数类型';
  44. comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.COUNTS
  45.   is '统计次数';
  46. update DPHOMEWMS.WMS_OPERATION_RECORD set OPERATION_TIME = sysdate where OPERATION_TIME is null;
  47. insert into DPHOMEWMS.WMS_OPERATION_RECORD_TMP select * from WMS_OPERATION_RECORD;
  48. drop table DPHOMEWMS.WMS_OPERATION_RECORD;
  49. alter table DPHOMEWMS.WMS_OPERATION_RECORD_TMP rename to WMS_OPERATION_RECORD;
  50. alter table DPHOMEWMS.WMS_OPERATION_RECORD enable row movement;
复制代码
(1)OPERATION_TIME是分区键,每一个月会自动创建一个分区,分区键不允许为null。
(2)alter table table_name enable row movement;    是指允许分区表的分区键是可更新,当某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,如果开启了这个选项,就会把这行从这个分区中delete掉,并加到更新后所属的分区,此时就会发生rowid的改变。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。如果没有开启这个选项,就会在更新时报错。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
沙发
 楼主| 发表于 2020-4-10 17:11:25 | 只看该作者
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
发表于 2020-4-10 17:39:55 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
地板
 楼主| 发表于 2020-4-11 16:49:58 | 只看该作者
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
5#
发表于 2020-4-11 17:58:25 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-9-26 00:34 , Processed in 0.126405 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表