7.1有条件的更新插入 Merge into

插入之前,看表中是否有这次准备插入的却已经存在的数据,存在的进行更新,不存在进行插入 

在oracle里面有两种方法:

一,Merge into

MERGE INTO test1  

USING test2  

ON (test1.numid = test2.numid)  

WHEN MATCHED THEN --不需要填写更新的目标表  

    UPDATE SET test1.varid = test2.varid  

WHEN NOT MATCHED THEN --不需要填写插入的目标表  

INSERT VALUES (test2.numid, test2.varid);  

例子:

--column1 column2 column3是变量

 MERGE INTO users a

      USING (SELECT v_column1 NAME, v_column2 password, v_column3 desc

               FROM dual) b

      ON (a.name = b.name)

      WHEN MATCHED THEN

        UPDATE SET a.password = b.password and a.desc = b.desc

      WHEN NOT MATCHED THEN

        INSERT (NAME, password, desc) VALUES (b.NAME, b.password, b.desc);

 

二.

--p_column1是变量或者参数
select count(*) into v_cnt from a where a.name = p_column1
if v_cnt>0 then update ..
else insert..
oracle中的exists表示()内子查询语句返回结果不为空,是在where后面的.说明where条件成立就会执行主sql语句,
如果为空就表示where条件不成立,sql语句就不会执行。
not exists和exists相反,子查询语句结果为空,则表示where条件成立,执行sql语句。负责不执行。
在sqlserver 可以直接使用
if exists(select 1 from a where a.name = p_column1)
update a set ...
else
insert ...

转载于:https://www.cnblogs.com/sannyhome/p/9213248.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值