web-dev-qa-db-fra.com

Oracle Partition - Erreur ORA14400 - la clé de partition insérée ne correspond à aucune partition

J'essaie d'insérer des informations dans une table de partition, mais je ne sais pas ce que je fais mal! Montrez-moi cette erreur: ORA-14400: inserted partition key does not map to any partition "

La table dba_tab_partitions affiche ces informations ci-dessous:

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

S'il vous plaît, aidez-moi rs

9
Alan
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;

Cette requête répertorie le nom de colonne utilisé comme clé et les valeurs autorisées. assurez-vous d'insérer les valeurs autorisées (high_value). Sinon, si la partition par défaut est définie, elle y irait.


MODIFIER:

Je présume que votre TABLE DDL serait comme ça.

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)
  );

Ce qui signifie que j'avais créé une partition avec plusieurs colonnes qui contient une valeur inférieure à la plage composite (98,20091024);

C'est d'abord COD_PAIS <= 98 et aussi FEC_DATA < 20091024

Combinaisons et résultat:

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

Donc, le INSERT ci-dessous échoue avec ORA-14400; car (98,20091024) dans INSERT est [~ # ~] égal à [~ # ~] à celui dans DDL mais [~ # ~] pas [~ # ~] moins que ça.

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

Mais, nous essayons (97, 20091024), cela passe par

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

1 row created.
16