`
mqchange
  • 浏览: 32917 次
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 按月份分区

阅读更多

在Oracle中按月份分区,且只分12个。

 

一般情况下,使用范围(RANGE)分区

 

 

CREATE TABLE customer(age NUMBER, birthday DATE)
  PARTITION BY RANGE (birthday)  
(  
  PARTITION P1 VALUES LESS THAN (to_date('2013-01-01','yyyy-mm-dd')),  
  PARTITION P2 VALUES LESS THAN (to_date('2013-02-01','yyyy-mm-dd'))
) 

 

 

插入的记录如果不符合条件,则会报错。如果年份修改,则不能完成上述条件,它会每一年都会创造12个分区(如果每次插入不同年份的12个月)

 

 

方法2:使用 INTERNAL 分区

 

CREATE TABLE customer(age NUMBER, birthday DATE)
  PARTITION BY RANGE (birthday)  
  interval (NUMTOYMINTERVAL (1,'MONTH'))
(  
  PARTITION P1 VALUES LESS THAN (to_date('2013-01-01','yyyy-mm-dd')),  
  PARTITION P2 VALUES LESS THAN (to_date('2013-02-01','yyyy-mm-dd'))
) 

 

该方法不会报错,但是还是会根据不同年份的相同月份生成分区。并且自动生成的分区名称不太易于阅读,格式如:SYS_P81。(我不知道如何控制该输出,如果有知道的请告诉一下。谢谢)

 

方法3:使用列表(LIST)分区

 

CREATE TABLE customer(age NUMBER, birthday DATE)

PARTITION BY LIST (TO_CHAR(birthday,'mm'))
(
 PARTITION P1 VALUES ('01'), 
 PARTITION P2 VALUES ('02')
)

 

该语句根本不会执行通过(缺失右括号)。不过这种方式是最接近需求了。那到底如何办呢?人为添加一个列???

 

 

方法4: 使用虚拟列

 

 

CREATE TABLE customer(age NUMBER, birthday DATE,vircol as (to_char(birthday,'mm')))
PARTITION BY list (vircol)
   (
   PARTITION p1 VALUES ('01'),
   PARTITION p2 VALUES ('02'),
   PARTITION p3 VALUES ('03')
  )

 

笨笨的完成需求……  不知哪位高手,能否给个简单的可行的解决方案?先行谢过!!!

 

 一般不会闲着没事去读分区名称,还是建议使用INTERNAL 分区 

 http://five.iteye.com/blog/1769773

0
1
分享到:
评论
1 楼 netkiller.github.com 2013-01-15  
分区不灵活,受索引的限制

相关推荐

    ORACLE表自动按月分区步骤

    ### Oracle表自动按月分区步骤详解 #### 一、背景介绍 在大数据处理与分析领域,数据库表的性能优化显得尤为重要。特别是在面对大量历史数据时,合理地利用表分区技术可以显著提高查询效率,减少资源消耗。Oracle...

    Oracle表分区详解(优缺点)

    例如,销售数据可以按月份进行分区。创建范围分区时,需定义每个分区的边界值,如`VALUES LESS THAN`。 2. 哈希分区:基于哈希函数将数据均匀地分散到各个分区。这种方法适用于无特定顺序的数据分布,但不支持范围...

    oracle数据表分区知识

    ### Oracle 数据表分区详解 #### 一、分区表理论知识 Oracle 提供了表分区功能以支持非常大型的数据库(VLDB)。通过分区技术,可以根据指定的分区键将数据分散到不同的物理位置,从而实现更高效的数据管理和查询...

    Oracle大表分区的技术

    例如,可以根据日期范围将订单表按照年份或月份进行分区。 2. **列表分区**:根据列的特定值列表进行分区。适合于已知固定值的情况,如国家代码或产品类别。 3. **散列分区**:通过散列函数将数据均匀分布到多个...

    ORACLE-分区表的用法

    例如,可以根据日期将销售数据划分为不同的月份分区。在创建范围分区时,需要注意以下几点: - 每个分区都必须指定一个`VALUES LESS THAN`子句,用于定义分区的上限值。 - 除第一个分区外,所有分区都有一个隐式...

    Oracle表分区详解

    例如,可以按月份或者年份对订单表进行分区,使得在查询特定时间段的数据时,数据库只扫描相关的分区。 2. **散列分区**:使用散列函数将数据分布到固定数量的分区。这种方法适用于负载均衡,但不保证数据的物理...

    Oracle分区表及分区索引

    例如,可以将交易数据按照月份进行分区。范围分区是最为常用的,并且分区键经常采用日期。 CREATE TABLE RangeTable( idd INT PRIMARY KEY, enamel VARCHAR(10), grade INT ) PARTITION BY RANGE (grade) ( ...

    Oracle分区表用法

    例如,销售数据可以按月份分区。每个分区都有一个VALUES LESS THAN子句定义上限,且最高分区使用MAXVALUE表示不确定的最大值。 示例: ```sql CREATE TABLE CUSTOMER ( CUSTOMER_ID NUMBER NOT NULL PRIMARY ...

    oracle自动一年建立表分区.zip

    "Oracle自动一年建立表分区.zip"文件显然包含了用于自动创建按时间(一年)分区的Oracle脚本。这样的脚本对于处理大量历史数据的企业尤其有用,因为它可以帮助将大表分解成更小、更易管理和查询的部分。 表分区的...

    Oracle数据库分区管理.docx

    例如,按时间(如月份)分区的销售数据表,只处理特定月份的查询时,无需扫描整个表。 2. 可管理性增强:分区允许对大量数据进行分而治之,简化了数据管理和维护。例如,可以针对不同分区应用不同的压缩策略,或者...

    深入学习分区表及分区索引(详解oracle分区).docx

    - 对于包含历史数据的表,如按月份划分的数据,新数据存入最新分区,旧数据保持只读状态,这有利于管理和分析。 2. **Oracle支持的分区类型**: - 表分区:对表进行逻辑分割。 - 索引分区:针对表的索引进行分区...

    ORACLE分区表的概念及操作

    例如,销售数据可以按月份分区,每个分区对应一个月。创建范围分区时,需要定义VALUES LESS THAN子句,指定分区的上限值,最后一个分区通常使用MAXVALUE,表示所有大于前一个分区上限值的数据都属于这个分区。 创建...

    ORACLE表分区例子

    1. **范围分区**:根据列值的范围进行分区,例如,按照年份或月份划分历史销售数据。例如,创建一个按日期范围分区的表,可以将每年的数据存储在一个单独的分区中。 ```sql CREATE TABLE sales ( sale_id NUMBER, ...

    Oracle10个分区和Mysql分区区别详解

    例如,可以按月份对历史销售数据进行分区。Oracle 还支持最大值(maxvalue)分区,用于存储不在指定范围内的记录。 - MySQL 的 Range 分区与 Oracle 类似,也是基于列值的范围,适合于有序数据,如日期、编号等。...

    Oracle系列_分区

    例如,可以根据日期字段将历史交易数据按年、季度或月份划分。 2. **列表分区**:根据列的特定值列表进行分区。适合于有明确分组的数据,如不同国家或地区。 3. **哈希分区**:通过散列函数将数据均匀分布到各个分区...

Global site tag (gtag.js) - Google Analytics