if exist 语句

处处留心 2015-04-29 04:48:04
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语句
上面语句出错
...全文
301 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
美到心痛 2015-05-03
  • 打赏
  • 举报
回复
试一下:

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');
  
rick-he 2015-05-03
  • 打赏
  • 举报
回复
百度一下 MERGE,有则更新,无则插入
卖水果的net 2015-04-30
  • 打赏
  • 举报
回复
LZ 百度一下 MERGE 的用法,这个比较适合这个场景。
binsweet 2015-04-29
  • 打赏
  • 举报
回复
不能一条sql, 但是可以用两个sql 先update (大不了update空而已),后insert ....select ... where not EXISTS (....)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧