[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