Oracle-14400 错误,但输入分区列的值确实映射到分区

问题描述 投票:0回答:1

我在尝试插入名为 MACON 的 Oracle 表时遇到问题。表结构如下。 我遇到的问题是,当我尝试将值插入 MEASPART 列(分区列)时,我收到 Oracle 14400 错误“插入的分区键未映射到任何分区”。

密钥是根据填充 MEASID 列的序列生成的(我为遇到此错误的会话生成的 currval 是 6174327,但在此之前的其他会话中也发生过这种情况,无论是对我还是其他用户)然后通过取模来创建分区号,如下所示:

:NEW.measpart := MOD(:NEW.measid,7);

对于我从序列中获得的值 (6174327),我将 MEASPART 分区号生成为

MOD(6174327,7) = 5;

从下面的表构建代码中可以看出,存在一个可以处理值 5 的分区,因此我不确定为什么会发生此错误。检查

select partition_name,high_value from dba_tab_partitions where table_name='MACON';

显示与构建脚本中相同的信息 - 分区范围从 P0 到 P6,允许值为 0 到 6。

有人可以告诉我可能出现的问题可能导致此 ORA-14400 错误吗?因为我此时完全困惑,因为我的所有检查似乎都表明不应阻止该值插入?

CREATE TABLE DSDBA.MACON
(
  MEASID    NUMBER(16)                          NOT NULL,
  ACNO      VARCHAR2(9 BYTE),
  DSETID    NUMBER(8),
  IPJREF    NUMBER(8),
  TOPRSREF  NUMBER(8),
  IRSREF    NUMBER(8),
  PRIMDPT   VARCHAR2(200 BYTE),
  CRMTYP    VARCHAR2(200 BYTE),
  CRM       VARCHAR2(200 BYTE),
  QMREF     VARCHAR2(200 BYTE),
  CHECKS    VARCHAR2(1 BYTE)                    NOT NULL,
  CRBY      VARCHAR2(255 BYTE)                  NOT NULL,
  MODBY     VARCHAR2(255 BYTE)                  NOT NULL,
  CREATED   DATE                                NOT NULL,
  MODIFIED  DATE                                NOT NULL,
  MEASPART  NUMBER
)
NOCOMPRESS 
TABLESPACE TS1A
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING
PARTITION BY LIST (MEASPART)
(  
  PARTITION P0 VALUES (0)
    LOGGING
    NOCOMPRESS 
    TABLESPACE TS1B
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION P1 VALUES (1)
    LOGGING
    NOCOMPRESS 
    TABLESPACE TS1B
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION P2 VALUES (2)
    LOGGING
    NOCOMPRESS 
    TABLESPACE TS1B
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION P3 VALUES (3)
    LOGGING
    NOCOMPRESS 
    TABLESPACE TS1B
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION P4 VALUES (4)
    LOGGING
    NOCOMPRESS 
    TABLESPACE TS1B
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION P5 VALUES (5)
    LOGGING
    NOCOMPRESS 
    TABLESPACE TS1B
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION P6 VALUES (6)
    LOGGING
    NOCOMPRESS 
    TABLESPACE TS1B
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               )
)
NOCACHE;

`

oracle database-partitioning
1个回答
0
投票

它对于给定的 mod 函数运行良好,并且可以很好地加载到表中。

当值大于6时插入失败。

下面给出的是一个有效的插入 stmt 示例。

insert into MACON  values(1,123456789,null,null,null,null,null,null,null,null,'Y','testing','testing',sysdate,sysdate,MOD(6174327,7)); 
© www.soinside.com 2019 - 2024. All rights reserved.