Oracle sql-从包含分区的另一个表复制数据
我希望将数据从一个表复制到另一个表,我使用Oracle pl/sql,我理解这个简单的语句Oracle sql-从包含分区的另一个表复制数据,oracle,Oracle,我希望将数据从一个表复制到另一个表,我使用Oracle pl/sql,我理解这个简单的语句 insert into cc_staff_2 select * from cc_staff 这将从CC_staff中选择所有列,并将它们放置在CC_staff_2中。但是,两个表中都有不同的分区。比如说 我用一个partion创建了CC_员工 CREATE TABLE CC_STAFF ( CCS_STAFF_SK NUMBER (38),
insert into cc_staff_2
select * from cc_staff
这将从CC_staff中选择所有列,并将它们放置在CC_staff_2中。但是,两个表中都有不同的分区。比如说
我用一个partion创建了CC_员工
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-插入的分区密钥不映射到任何分区
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))
第一个表的
CCS_OFFICE_SK
列中的值不同于561、562、563
您可以通过为CCS\u OFFICE\u SK
上的每个可能值创建一个分区或添加一个默认分区来处理它
假设您在CCS\u OFFICE\u 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) )
第一个表的
CCS_OFFICE_SK
列中的值不同于561、562、563
您可以通过为CCS\u OFFICE\u SK
上的每个可能值创建一个分区或添加一个默认分区来处理它
假设您在CCS\u OFFICE\u 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) )
因此,如果我复制表,也复制数据。然后删除新表中的旧分区并添加新分区?因此,如果复制表,也要复制数据。然后删除新表中的旧分区并添加新分区?谢谢,我在“CCS_OFFICE_SK”中仅有的值是561、562和563。但我添加了一个deafult分区,并将其复制到数据上。谢谢,我在“CCS_OFFICE_SK”中仅有的价值观是561、562和563。但我添加了一个deafult分区,并将其复制到数据上。谢谢