我希望将数据从一个表复制到另一个表,我使用Oracle pl / sql,我理解简单的声明
insert into cc_staff_2
select * from cc_staff
这将选择CC_staff中的所有列并将它们放入CC_staff_2。但是,两个表都有不同的分区。所以例如
我用分区
创建了CC_staff CREATE TABLE CC_STAFF
( CCS_STAFF_SK NUMBER (38),
CCS_NAME VARCHAR2 (30),
CCS_BIRTH_DATE DATE,
CCS_GENDER VARCHAR2 (1),
CCS_MAR_STATUS VARCHAR2 (20),
CCS_OFFICE_SK NUMBER (38),
CCS_SALARY NUMBER (38))
PARTITION BY RANGE (CCS_SALARY)
(PARTITION SAL_20 VALUES LESS THAN (20000),
PARTITION SAL_30 VALUES LESS THAN (30000),
PARTITION SAL_50 VALUES LESS THAN (50000))
然后将Cc_Staff_2创建为同一个表但具有不同的分区
CREATE TABLE CC_STAFF
( CCS_STAFF_SK NUMBER (38),
CCS_NAME VARCHAR2 (30),
CCS_BIRTH_DATE DATE,
CCS_GENDER VARCHAR2 (1),
CCS_MAR_STATUS VARCHAR2 (20),
CCS_OFFICE_SK NUMBER (38),
CCS_SALARY NUMBER (38))
PARTITION BY LIST (CCS_OFFICE_SK)
(PARTITION NEWC VALUES (561),
PARTITION LEED VALUES (562),
PARTITION SHEF VALUES (563))
我手动将数据输入CC_Staff,现在希望将此数据复制到CC_Staff_2。正如您所看到的那些列是相同的栏,最后两列具有不同的分区。
我得到的错误信息是:
ORA-14400 - 插入的分区键不映射到任何分区
答案 0 :(得分:0)
第一个表的CCS_OFFICE_SK
列中的值与561,562,563不同。
您可以通过为CCS_OFFICE_SK
上的每个可能值创建分区或添加默认分区来处理它。
假设您在CCS_OFFICE_SK
中拥有值999,则需要:
CREATE TABLE Cc_Staff_2
( CCS_STAFF_SK NUMBER (38),
CCS_NAME VARCHAR2 (30),
CCS_BIRTH_DATE DATE,
CCS_GENDER VARCHAR2 (1),
CCS_MAR_STATUS VARCHAR2 (20),
CCS_OFFICE_SK NUMBER (38),
CCS_SALARY NUMBER (38))
PARTITION BY LIST (CCS_OFFICE_SK)
(PARTITION NEWC VALUES (561),
PARTITION LEED VALUES (562),
PARTITION SHEF VALUES (563),
PARTITION p_999 VALUES (999))
或者,如果您不想检查CCS_OFFICE_SK
的所有可能值,则可以对默认分区使用不同于561,562,563的值:
CREATE TABLE Cc_Staff_2
( CCS_STAFF_SK NUMBER (38),
CCS_NAME VARCHAR2 (30),
CCS_BIRTH_DATE DATE,
CCS_GENDER VARCHAR2 (1),
CCS_MAR_STATUS VARCHAR2 (20),
CCS_OFFICE_SK NUMBER (38),
CCS_SALARY NUMBER (38))
PARTITION BY LIST (CCS_OFFICE_SK)
(PARTITION NEWC VALUES (561),
PARTITION LEED VALUES (562),
PARTITION SHEF VALUES (563),
PARTITION P_DEFAULT VALUES (DEFAULT) )