一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - Oracle merge合并更新函數實例詳解

Oracle merge合并更新函數實例詳解

2020-04-11 16:17smileNicky Oracle

這篇文章主要給大家介紹了關于Oracle merge合并更新函數的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

MERGE語句是Oracle9i新增的語法,用來合并UPDATE和INSERT語句。 通過MERGE語句,根據一張表或多表聯合查詢的連接條件對另外一張表進行查詢,連接條件匹配上的進行UPDATE,無法匹配的執行INSERT。這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高于INSERT+UPDATE。通過這個MERGE你能夠在一個SQL語句中對一個表同時執行INSERT和UPDATE操作.

本博客介紹一下Oracle merge合并函數,業務場景:新增數據的時候要先查詢數據庫是否已經有改數據,有數據就更新數據,沒數據才新增數據,這是很常見的業務場景,如果是用Oracle數據庫的話,其實直接用merge函數效率更快,而且merge函數性能也相對比較好

merge函數的語法:

?
1
2
3
4
5
6
7
8
9
MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
 UPDATE table_name
 SET col1 = col_val1,
   col2 = col_val2
WHEN NOT MATCHED THEN
 INSERT (column_list) VALUES (column_values);

舉個例子:

SQL實現,意思是有數據就更新,沒數據才新增

?
1
2
3
4
5
6
7
8
9
10
11
12
13
MERGE INTO t_config_related A1 USING(select '97547758-6f85-419e-85f9-b8f711ca2660' seq,
   '97547758-6f85-419e-85f9-b8f711ca2658' tipsSeq,
   to_number('1') appLevel,
   '24e1ccc38d9542189d1cc6c23f814a18' relaSeq from dual) A2
ON(A1.seq = A2.seq)
WHEN MATCHED THEN
UPDATE SET
  A1.tips_seq = A2.tipsSeq,  
  A1.app_level = A2.appLevel,
  A1.rela_seq = A2.relaSeq
WHEN NOT MATCHED THEN
INSERT(seq , tips_seq , app_level , rela_seq)
VALUES(A2.seq , A2.tipsSeq , A2.appLevel , A2.relaSeq);
?
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
41
42
43
44
45
46
47
48
49
/**
  * 批量更新保存地區關聯信息
  * @date 2019年2月21日上午11:17:10
  * @return
  */
 
 @RequestMapping("/batchSaveTipsAreaConfig")
 @ResponseBody
 public ResultModel batchSaveTipsConfig(ApprTipsRelatedModel relatedModel) {
 
  List<ApprTipsRelatedModel> areaTipsList = new ArrayList<ApprTipsRelatedModel>();
 
  //封裝批量更新的地區列表
 
  String[] areaSeqs = StringUtils.split(relatedModel.getAreaSeq(),",");
 
  for (String areaSeq : areaSeqs) {
 
   ApprTipsRelatedModel areaRelatedModelNew = new ApprTipsRelatedModel();
 
   areaRelatedModelNew.setSeq(commonService.generateUUID());
 
   areaRelatedModelNew.setTipsSeq(relatedModel.getTipsSeq());
 
   areaRelatedModelNew.setAppLevel(NumConstant.COMMON_NUM_TREE);
 
   areaRelatedModelNew.setRelaSeq(areaSeq);
 
   areaTipsList.add(areaRelatedModelNew);
 
 }
 
  //批量更新新增數據
 
  try {
 
   this.tipsConfigService.batchSaveTipsRelatedConfig(areaTipsList);
 
   return ResultModel.success("保存成功");
 
  } catch(Exception e) {
 
   logger.error("批量綁定地區異常:{}"+e);
 
   throw new SuperControllerException();
 
  }
 
 }

注意要點:

在開發中我遇到一個異常,mybatis打印出來的SQL是這樣的:

?
1
Preparing: MERGE INTO appr_tips_config_related A1 ? USING( ? ? ? ? ? select ? seq , ? tipsSeq , ? appLevel , ? relaSeq from dual ? ? ? ? ) A2 ? ON( ? ? ? ? ?A1.seq = A2.seq ? ? ?) ? WHEN MATCHED THEN ? ? UPDATE SET A1.seq = A2.seq, A1.tips_seq = A2.tipsSeq, A1.app_level = A2.appLevel, A1.rela_seq = A2.relaSeq ? ? ?WHEN NOT MATCHED THEN ? ? ?INSERT(seq,tip_seq,app_level,rela_seq) ? ? ? ? VALUES(A2.seq , A2.tipsSeq , A2.appLevel , A2.relaSeq)

可以看出什么問題?打印出的SQL有很多問號,那是因為SQL有空格導致的,所以使用merge函數不用隨便加空格,不然會報錯的

?
1
? USING( ? ? ? ? ? select ? seq , ? tipsSeq , ? appLevel , ? relaSeq from dual ? ? ? ? ) A2 ? ON( ? ? ? ? ?A1.seq = A2.seq ? ? ?) ?

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/mzq123/p/10424506.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 我与白丝同桌的故事h文 | 丝瓜茄子绿巨人秋葵榴莲污 | 免费视频大全 | 久久综合香蕉久久久久久久 | 亚洲无限观看 | 久久这里只精品热在线18 | 美国69xxxx59 | 欧美涩区| 荡女人人爱全文免费阅读 | 白丝美女用胸伺候主人 | 久久婷婷五月综合色精品首页 | 日本 视频 在线 | 丝袜高跟小说 | 2020国产精品亚洲综合网 | 国产精品一区二区久久不卡 | 免费在线视频观看 | 日韩一区二区三区免费 | 亚洲精品久久久打桩机 | 91天堂在线视频 | 色综合91久久精品中文字幕 | 美女扒开奶罩让男人吃奶 | 激情视频激情小说 | 亚洲高清在线天堂精品 | 翁公与小莹在客厅激情 | 调教催眠 | 亚洲欧美优优色在线影院 | 明星ai智能人脸替换造梦在线播放 | 纲手被鸣人插 | 亚洲欧美国产自拍 | 91亚洲精品第一综合不卡播放 | 香艳69xxxxx有声小说 | 女主被当众调教虐np | 日本68xxxxxxxxx24 日本 片 成人 在线 | 好大好硬好深好爽想要小雪 | 掀开奶罩边躁狠狠躁软学生 | 乌克兰一级毛片9一18 | 精品久久综合一区二区 | 久久精品嫩草影院免费看 | 艾秋麻豆果冻剧传媒在线播放 | 久久性综合亚洲精品电影网 | 娇妻被朋友征服中文字幕 |