【问题标题】:Partition by Week - Oracle Database按周分区 - Oracle 数据库
【发布时间】:2018-01-16 10:05:30
【问题描述】:

我想知道您能否帮我弄清楚并处理 Oracle 中的按周分区。

我的情况是我每天都有很多数据,我想每周进行分区。在将数据插入数据库时​​,我还将使用 sysdate 以使记录唯一。

我应该手动编写它们吗?如果是,它应该是什么样子?我是否仍应使用类似:VALUES LESS THAN?

非常期待听到您的意见!

【问题讨论】:

标签: sql oracle database-partitioning


【解决方案1】:

每周分区是个问题,但您可以创建 7 天的间隔分区。 Oracle 将自动为新条目创建新分区。

create table TEST_partition
(
  ID              number(4, 0)
, creation_date   date
)
partition by range  (creation_date)
  interval ( numtodsinterval(7, 'day') )
  (partition TEST_P1 values less than (to_date(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')));

【讨论】:

  • 为什么每周分区是个问题?
  • @VBABegginer - 可能他的意思是因为试图“强制”一周的第一天?但是通过明确为“小于 2018 年 1 月 1 日”创建一个分区,下一个分区将从 2018 年 1 月 1 日开始,所以他成功地“强制”了一周从星期一开始?
  • 按范围分区(“周”)(分区“P2”值小于 (40),分区“P3”值小于 (42));这样的事情会起作用吗? @MatBailie
  • @VBABegginer - 它没有 INTERVAL 子句,因此它不会自动增长。我建议从这个答案中给出的代码开始,并阅读我在对 OP 的评论中给出的链接。
  • @MatBailie,我刚刚完成了对答案和文章的检查,并根据我的情况对其进行了调整,并且可以正常工作。但是,我只是想为自己说清楚。也可以预定义所有分区吗?一年中的所有星期,因为正如你所说,它们不会自动增长,但如果我预先定义它们,它会起作用吗?感谢 Arkadiusz 的帮助,我会将其标记为已回答。
【解决方案2】:

您可以按如下方式创建区间分区:

CREATE TABLE invoices
(invoice_no    NUMBER NOT NULL,
 invoice_date  DATE   NOT NULL,
 comments      VARCHAR2(500))
PARTITION BY RANGE (invoice_date)
INTERVAL (NUMTODSINTERVAL(7,'DAY'))
(PARTITION invoices_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')));

从周日到周六创建一个为期 7 天的新分区。

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2015-11-01
    相关资源
    最近更新 更多