当前位置:   article > 正文

oracle批量插入数据_oracle新增多条数据sql

oracle新增多条数据sql

oracle批量插入数据,如果数据已存在,则更新,不存在则新增对应的sql书写方式

在Oracle中,可以使用MERGE语句实现批量插入数据,如果数据已存在则更新,不存在则新增。

MERGE语句的基本语法如下:

sql

MERGE INTO table_name t
USING (SELECT ... FROM ...) s
ON (t.column_name = s.column_name)
WHEN MATCHED THEN
  UPDATE SET t.col1 = s.val1, t.col2 = s.val2 ...
WHEN NOT MATCHED THEN
  INSERT (col1, col2, ...) VALUES (s.val1, s.val2, ...)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其中,table_name为目标表名,s为源表查询结果集,column_name为目标表和源表的关联列,MATCHED表示匹配到记录时执行UPDATE操作,NOT MATCHED则表示未匹配到记录时执行INSERT操作。

具体应用到批量插入数据时,可以通过JDBC的批处理机制减少与数据库的交互次数,代码示例如下:

java

public static void insertOrUpdateBatch(List<User> userList) {
    Connection conn = null;
    PreparedStatement pstmt = null;

    try {
        conn = getConnection();
        conn.setAutoCommit(false);

        String sql = "MERGE INTO user u " +
                "USING (SELECT ? id, ? name, ? age FROM dual) s " +
                "ON (u.id = s.id) " +
                "WHEN MATCHED THEN " +
                "  UPDATE SET u.name = s.name, u.age = s.age " +
                "WHEN NOT MATCHED THEN " +
                "  INSERT (id, name, age) VALUES (s.id, s.name, s.age)";

        pstmt = conn.prepareStatement(sql);

        for (User user : userList) {
            pstmt.setLong(1, user.getId());
            pstmt.setString(2, user.getName());
            pstmt.setInt(3, user.getAge());
            pstmt.addBatch();
        }

        pstmt.executeBatch();
        conn.commit();
    } catch (SQLException e) {
        try {
            if (conn != null) {
                conn.rollback();
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        e.printStackTrace();
    } finally {
        closeConnection(conn, pstmt);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

以上代码中,使用MERGE语句批量插入或更新用户信息。在循环中,通过设置PreparedStatement的参数批量添加需要插入或更新的数据,并最终执行批处理操作。

需要注意的是,该方法中的MERGE语句中,ON子句的列需要根据具体情况修改,确保目标表和源表可以正确关联。同时,为避免SQL注入攻击,参数值应该使用占位符形式设置,而非直接拼接字符串。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号