今天突然看到新项目中有Merge into写法,查了下资料,把自己理解的记录下来:
SQL如下:
MERGE INTO TABLE_A A
USING ( SELECT '' || :id || '' ID FROM DUAL) B
ON (A.ID = B.ID)
WHEN MATCHED
THEN
UPDATE SET
A.TYPE = :TYPE, A.CYCLE = :cycle, A.UNIT = :unit, A.TIMES = :times
WHEN NOT MATCHED
THEN
INSERT (ID,
NAME,
TYPE,
TIMES,
STATUS)
VALUES (:id,
:NAME,
:TYPE,
:times,
DEFAULT)
WHEN MATCHED --若匹配到记录
THEN
UPDATE SET A.TYPE = :TYPE, A.TIMES = :times --修改A表,数据为:A、B表匹配到的记录(A.ID = B.ID)
WHEN NOT MATCHED -- 若未匹配到记录
THEN
--插入新的记录到A表中
INSERT (ID,
NAME,
TYPE,
TIMES,
STATUS)
VALUES (:id,
:NAME,
:TYPE,
:times,
DEFAULT)
大致理解为:SELECT * FROM TABLE_A A ,TABLE_B B WHERE A.ID = B.ID
判断查询是否有数据:有数据,修改查询出来的A表数据(若存在多条,应该会修改多条,未测试),没有数据则新插入一条记录到A表中
以上为个人理解,如理解有误,欢迎指出纠正