sql - 从包含分区

时间:2016-07-14 12:30:41

标签: oracle

我希望将数据从一个表复制到另一个表,我使用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 - 插入的分区键不映射到任何分区

1 个答案:

答案 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) )