Oracle 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),

我希望将数据从一个表复制到另一个表,我使用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),
                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分区,并将其复制到数据上。谢谢