当前位置: 代码迷 >> Oracle技术 >> if exist 话语
  详细解决方案

if exist 话语

热度:587   发布时间:2016-04-24 08:05:01.0
if exist 语句
if exists 
(SELEC  T.TRANSID FROM LOG T WHERE T.ORG_ID = '455755717' AND T.DATA_TYPE = '1002' AND T.GATHER_DATE = '2015-04-29' ) 
begin 
UPDATE LOG T SET T.TRANSID = '165e9169c9e646c199cf973df1e3b5be',T.DATA_ERRFLAG = '1',T.DATA_SAVE = 0 , T.DATA_TOTAL = 0  WHERE T.ORG_ID = '455755717' AND T.DATA_TYPE = '1002' AND T.GATHER_DATE = '2015-04-29'
end 
else 
begin 
INSERT INTO LOG (ORG_ID, GATHER_DATE, DATA_TYPE, TRANSID, DATA_ERRFLAG) VALUES ('455755717', 
'2015-04-29', '1002', '165e9169c9e646c199cf973df1e3b5be', '1')
  end

语句很简单,判断数据库的表中是否存在某条记录,存在更新,不存在就插入

我想用一条语句实现,求SQL语句
上面语句出错
------解决思路----------------------
不能一条sql,
但是可以用两个sql
先update (大不了update空而已),后insert ....select  ...  where  not EXISTS (....)
------解决思路----------------------
LZ 百度一下 MERGE 的用法,这个比较适合这个场景。
------解决思路----------------------
百度一下 MERGE,有则更新,无则插入
------解决思路----------------------
试一下:

merge into LOG T
using (select '455755717' ORG_ID,
              '1002' DATA_TYPE,
              '2015-04-29' GATHER_DATE
         from dual) b
on (T.ORG_ID = b.ORG_ID AND T.DATA_TYPE = b.DATA_TYPE AND T.GATHER_DATE = b.GATHER_DATE)
when matched then
  update
     SET T.TRANSID      = '165e9169c9e646c199cf973df1e3b5be',
         T.DATA_ERRFLAG = '1',
         T.DATA_SAVE    = 0,
         T.DATA_TOTAL   = 0
when not matched then
  insert
    (ORG_ID, GATHER_DATE, DATA_TYPE, TRANSID, DATA_ERRFLAG)
  VALUES
    ('455755717',
     '2015-04-29',
     '1002',
     '165e9169c9e646c199cf973df1e3b5be',
     '1');
  
  相关解决方案