2016-08-25 77 views
0

編寫一個刪除等級超過150的記錄的查詢。如果記錄存在,則更新成績併爲每個成員添加25作爲內部成員。插入記錄,如果記錄不存在等級爲25我們可以在合併中有兩個匹配的子句

Merge into employeegrades empg 
    using (select id, name from temp_emp) e 
    on (empg.id= e.id) 
    when matched then 
    update set empg.grades = empg.grades + 25 
    delete where empg.grades > 150 
    when not matched then insert (id,grades) values (e.id, 25); 

這是工作正常,但當我修改如下的聲明,它不工作:

merge into employeegrades eg 
using (select id, name from temp_emp) emp 
on (eg.id = emp.id) 
when matched and eg.grades > 150 then 
delete 
when matched 
update set eg.grades = eg.grades+25 
when not matched then 
insert (id,grades) 
values (emp.id, 25); 

什麼是錯用以上查詢?我們不能在合併中指定兩個匹配的條件嗎?

回答

1

「我們不能在合併中指定兩個匹配條件嗎?」

syntax rules in the Oracle documentation指定兩個子句:

  • merge_update_clause其執行的更新和/或刪除針對現有行
  • merge_insert_clause,其執行的新行的插入

也就是說,這些條款是根據行爲來定義的他們執行,而不是他們是否匹配或不匹配。因爲在MATCHED時插入或在未匹配時更新是沒有意義的。

因此,WHEN MATCHED THEN關鍵字短語只能在MERGE語句中出現一次,因爲語法只允許一個merge_update_clause

相關問題