2016-07-14 13 views
1

進出口尋找將數據從一個表複製到另一個數據拷貝,我使用Oracle PL/SQL,我理解簡單的語句SQL - 從另一個表,其中包括分區

insert into cc_staff_2 
select * from cc_staff 

這從CC_staff並選擇所有列將他們置於CC_staff_2。但是,兩個表都有不同的分區。因此,例如

我創建CC_staff與partion

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

謝謝你 –

回答

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)) 
+0

謝謝,我在'CCS_OFFICE_SK'中唯一的值是561,562和563.但是我添加了一個deafult分區並將其複製到數據上。 謝謝 –