【问题标题】:Interval Partitioning In Oracle on SYSDATE在 SYSDATE 上 Oracle 中的间隔分区
【发布时间】:2019-10-13 09:44:21
【问题描述】:

我正在寻找动态创建分区的最佳方式。例如,分区 1 将保存截至今天 (SYSDATE) 的所有记录,分区 2 将保存昨天日期 (SYSDATE-1) 的记录,依此类推,直到 SYSDATE-29。

到目前为止,我已经尝试过使用:

PARTITION BY RANGE(COLUMN_NAME)
INTERVAL(NUMTODSINTERVAL(1,'DAY'))
(
PARTITION p0 VALUES LESS THAN (select SYSDATE from dual)
);

PARTITION BY RANGE(COLUMN_NAME)
INTERVAL(NUMTODSINTERVAL(1,'DAY'))
(
PARTITION p0 VALUES LESS THAN (to_char(SYSDATE,'DD-MON-YY')from dual)
);

但我收到如下错误:

“ORA-14019:分区绑定元素必须是以下之一:字符串、日期时间或间隔文字、数字或 MAXVALUE”

那么,我该怎么做呢?

【问题讨论】:

  • 您不能在分区 <...> 小于子句中使用 SYSDATE。它必须是错误或 MAXVALUE 关键字中给出的文字。

标签: oracle oracle12c dynamic-sql database-partitioning


【解决方案1】:

这是一个间隔分区表的示例:

create table partition_interval_demo
( id         number(6)     generated always as identity
, val        varchar2(50)  not null
, sale_date  date          not null )
partition by range (sale_date) interval (interval '1' day)
( partition p1 values less than (date '0001-01-01') );

检查您的定义在哪里不同。

【讨论】:

    【解决方案2】:
    column curr_date new_value current_date
    select to_char(sysdate, 'MM-DD-YYYY') crr_date
      from global_name
    /
    
    create table partition_interval_demo
    ( id         number(6)     generated always as identity
    , val        varchar2(50)  not null
    , sale_date  date          not null )
    PARTITION BY RANGE(sale_date) INTERVAL(NUMTODSINTERVAL(1,'DAY'))
    (
    PARTITION p0 VALUES LESS THAN (TO_DATE('&current_date', 'MM-DD-YYYY'))
    );
    

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 1970-01-01
      • 2016-03-05
      • 2019-01-10
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多