2017-09-07 124 views
0

我有下面的合併查詢,我想更新日期和perfromnce問題我使用ROWID邏輯。合併使用更新插入新行

但我想知道它是否插入新行?我只想更新表TEST_GRP,並且不想插入任何新行。

因爲我第一次使用ROWID邏輯我真的不確定它是插入新行還是隻更新表。

MERGE INTO TEST_GRP tgt 
    USING (SELECT ID, 
       ROWID r_id, 
       row_number() over (partition by ID ORDER BY DT_DATE) rn 
     FROM TEST_GRP) src 
    ON (tgt.rowid = src.r_id AND src.rn = 1) 
WHEN MATCHED THEN 
    UPDATE SET DT_DATE = to_date('01.01.2017', ''dd.mm.yyyy'') 
    WHERE DT_DATE != to_date('01.01.2016', ''dd.mm.yyyy'') 
    and DB_NAME = 'ARD'; 
+0

我很好奇爲什麼日期在你的更新中與where子句不同。 「除非日期爲01.01.2016,否則更新至01.01.2017」。 –

回答

1

您不必插入子句添加到merge聲明作爲docs說:

merge_update_clause ...您可以通過自身或與 merge_insert_clause指定此條款

而你沒有在它的代碼,所以不插入(S)會發生。

merge_insert_clause:

2

它將更新沒有問題的行和不插入新行。

在您的UPDATE語句probalie中,它會導致您在格式掩碼SET DT_DATE = to_date('01 .01.2017',''dd.mm.yyyy'')DT_DATE!= to_date('01 .01.2016' ,''dd.mm.yyyy'')