merge into能夠使oracle數據表中已有數據進行合併。即有則update,不然更新java
下邊的示例是在jdbc數據源鏈接後測試經過的sql
一、單條數據
oracle
Long companyAuthId = SeqkeyUtil.getSeqKey(vids, "COMPANY_AUTH_ID"); CompanyAuth comtmp = companyList.get(0); String sql = "merge into COMPANY_AUTH auth using (select ? MOBILE from dual) tmp on (auth.mobile=tmp.mobile)"+ " WHEN MATCHED THEN"+ " UPDATE SET auth.reserve=?"+ " WHEN NOT MATCHED THEN"+ " INSERT (id,MOBILE) VALUES (?, ?)"; vids.update(sql, new Object[]{comtmp.getMobile(),comtmp.getReserve(),companyAuthId+"",comtmp.getMobile()});
二、多條數據(批處理)ide
Long companyAuthId = SeqkeyUtil.getSeqKey(vids, "COMPANY_AUTH_ID");//seqs 表主鍵使用 List<Object[]> batch = new ArrayList<Object[]>(); for (CompanyAuth company : companyList) { Object[] values = new Object[] { company.getMobile(), company.getReserve(), companyAuthId+"", company.getMobile() }; batch.add(values); } String sql = "merge into COMPANY_AUTH auth using (select ? MOBILE from dual) tmp on (auth.mobile=tmp.mobile)"+ " WHEN MATCHED THEN"+ " UPDATE SET auth.reserve=?"+ " WHEN NOT MATCHED THEN"+ " INSERT (id,MOBILE) VALUES (?, ?)"; vids.batchUpdate(sql, batch);
若是出現多張表的話只須要針對using (select ? MOBILE from dual) tmp on修改便可測試