zoukankan      html  css  js  c++  java
  • 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 ...

  • 相关阅读:
    质量标准
    期权只是一张纸而已,但它的背后是心机
    Spring注解 @Resource和@Autowired
    Java7新语法 -try-with-resources
    Spring中Bean的命名问题及ref和idref之间的区别
    mybatis注解详解
    jquery ajax局部加载方法介绍
    SpringMVC批量上传
    【uploadify3.1使用二】批量文件、图片上传
    IE浏览器上传文件时本地路径变成”C:fakepath”的问题
  • 原文地址:https://www.cnblogs.com/sannyhome/p/9213248.html
Copyright © 2011-2022 走看看