我在尝试插入名为 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;
`
它对于给定的 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));