Oracle分区 - 错误ORA14400 - 插入的分区键不映射到任何分区

时间:2014-06-27 14:41:46

标签: oracle database-partitioning

我正在尝试在分区表中插入信息,但我不知道我做错了什么! 告诉我这个错误: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

请帮帮我

2 个答案:

答案 0 :(得分:16)

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而失败;因为(98,20091024)中的INSERT EQUAL 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 ,而 NOT 小于SQL> INSERT INTO HE0_DT_INF_INTERFAZ_MES(COD_PAIS, FEC_DATA, INTERFAZ) 2 VALUES(97, 20091024, 'CTA'); 1 row created.

{{1}}

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

{{1}}

答案 1 :(得分:1)

此问题需要为日期列值添加分区,如果最后一个分区是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