2014-12-30 24 views
0

我在表「test」上有一個插入語句。 PK在表格「x」欄中的「test」。 現在插入時,如果重複行來了,那麼同一行應該得到更新,而不是插入。 我怎樣才能做到這一點。 這是可能的dup_val_on_index插入時重定向重複行以更新

請幫忙。

+1

我想你可以使用MERGE語句這種情況的GROUP功能。 –

+2

首先定義「重複」。然後檢查Oracle的[merge](http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm),它可以執行插入或更新,具體取決於該行是否已經存在於目標表中。 – user272735

+0

這裏插入和updae是在同一張桌子上。如果可以通過,請給我一個例子 – user3195273

回答

0

首先沒有任何KEY列上面創建表的副本,並按照

步驟1:truncate表第一每當你遇到了一堆INSERT語句來

第2步:INSERT上述截斷表

第3步:執行MERGE語句像下面

MERGE INTO TABLE_MAIN M 
    USING TABLE_MAIN_COPY C 
    ON (m.id = c.id) 
    WHEN MATCHED THEN UPDATE SET M.somecol = c.somecol 
    WHEN NOT MATCHED THEN INSERT (m.id, m.somecol) 
    VALUES (c.id, c.somecol); 

合併時ORA-30926: unable to get a stable set of rows in the source tables在更新時有兩行或更多行時可能會發生錯誤。

您可避免使用與ID或類似ORA-30926: unable to get a stable set of rows in the source tables