[SQL ] 有資料UPDATE,無則INSERT(oracle)

作者: j16598231 (滎鶄)   2016-10-23 17:51:49
資料庫名稱:oracle
資料庫版本:11g
內容/問題描述:
各位好,小弟目前是寫JAVA的工程師。
最近遇到的問題是,如果資料庫有資料就UPDATE,否則就INSERT。
在MySQL上可以用ON DUPLICATE,但Oracle無這個語法。
後來有查詢到MERGE INTO的語法。
我的語法大概是如下
MERGE INTO TABLE_A TA
USING ( SELECT '值A' AS X,'值B' AS Y FROM DUAL) TB
ON(TA.X=TB.X)
WHEN MATCHED UPDEATE...
WHEN NOT MATCHED THEN INSERT...
但公司的DBA說MERGE INTO是資料倉儲(?)用,不是給我這樣用的。
所以現在的解法是先SELECT回JAVA後,再判斷要更新還是插入。
但這樣不就要2次IO嗎?如果我現在要處理10筆資料,不就要10*2=20次IO?
想請問是否有其他寫法呢?(有另外查到用EXCEPTION的方式,但preparestatment似乎
不能加上分號(;)?這我會再試試看。)
謝謝~~
作者: a926 (Aaron)   2016-10-23 19:17:00
MERGE INTO沒有限定情境吧=_= 即使是SQL Server上面的說明也沒有說適用在DW阿https://goo.gl/Tf2952 請他貼官方說明出來比較準
作者: SeanBoog (施吉祥先生)   2016-10-24 20:19:00
不太懂dw跟merge into的關係
作者: ray2501 (貓是一隻貓)   2016-10-25 23:33:00
我沒試過 不過看看 START WITH ... CONNECT BY clause啊,不對 忽略我的話,那是另外一個東西看起來 upsert 是用 MERGE 啊http://tinyurl.com/jn45p69

Links booklink

Contact Us: admin [ a t ] ucptt.com