【问题标题】:Oracle Partition - Error ORA14400 - inserted partition key does not map to any partitionOracle 分区 - 错误 ORA14400 - 插入的分区键未映射到任何分区
【发布时间】:2014-06-27 14:41:45
【问题描述】:

我正在尝试在分区表中插入信息,但我不知道我做错了什么! 显示此错误:ORA-14400: inserted partition key does not map to any partition"

表格dba_tab_partitions 显示以下信息:

1   PDIA_98_20091023    0
2   PDIA_98_20091022    0
3   PDIA_98_20091021    0
4   PDIA_98_20091020    0
5   PDIA_98_20091019    0

请帮帮我

【问题讨论】:

  • 您正试图在不存在的分区中插入行。您是否定义了默认分区?创建一个默认分区并在插入语句之后检查该分区中的行以确定是否需要添加任何新分区
  • @user3249825 你能参考我更新的答案吗?

标签: oracle database-partitioning


【解决方案1】:
select partition_name,column_name,high_value,partition_position
from ALL_TAB_PARTITIONS a , ALL_PART_KEY_COLUMNS b 
where table_name='YOUR_TABLE' and a.table_name = b.name;

此查询列出用作键的列名和允许的值。确保插入允许的值(high_value)。否则,如果定义了默认分区,它会去那里。


编辑:

我想,你的 TABLE DDL 应该是这样的。

CREATE TABLE HE0_DT_INF_INTERFAZ_MES
  (
    COD_PAIS NUMBER,
    FEC_DATA NUMBER,
    INTERFAZ VARCHAR2(100)
  )
  partition BY RANGE(COD_PAIS, FEC_DATA)
  (
    PARTITION PDIA_98_20091023 VALUES LESS THAN (98,20091024)
  );

这意味着我创建了一个包含多个列的分区,该分区的值小于复合范围 (98,20091024);

这是第一个COD_PAIS <= 98FEC_DATA < 20091024

组合和结果:

98, 20091024     FAIL
98, 20091023     PASS
99, ********     FAIL
97, ********     PASS
 < 98, ********     PASS

所以下面的INSERT 失败并出现 ORA-14400;因为INSERT 中的(98,20091024)DDL 中的一个等于,但小于它。

SQL> INSERT INTO HE0_DT_INF_INTERFAZ_MES(COD_PAIS, FEC_DATA, INTERFAZ)
                                  VALUES(98, 20091024, 'CTA');  2
INSERT INTO HE0_DT_INF_INTERFAZ_MES(COD_PAIS, FEC_DATA, INTERFAZ)
            *
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition

但是,我们尝试(97,20091024),它通过了

SQL> INSERT INTO HE0_DT_INF_INTERFAZ_MES(COD_PAIS, FEC_DATA, INTERFAZ)
  2                                    VALUES(97, 20091024, 'CTA');

1 row created.

【讨论】:

    【解决方案2】:

    这个问题需要为日期列值添加分区,如果最后一个分区是20201231245959,那么插入20210110245959的值,就会出现这个问题。

    为此需要将 2021 分区添加到该表中

    ALTER TABLE TABLE_NAME ADD PARTITION PARTITION_NAME VALUES LESS THAN (TO_DATE('2021-12-31 24:59:59', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) NOCOMPRESS
    

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 2017-08-16
      • 2018-06-18
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多