最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle merge合并更新函數(shù)實例詳解

 更新時間:2019年02月24日 09:36:21   作者:smileNicky  
這篇文章主要給大家介紹了關(guān)于Oracle merge合并更新函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

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

merge函數(shù)的語法:

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實現(xiàn),意思是有數(shù)據(jù)就更新,沒數(shù)據(jù)才新增

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);
/**
  * 批量更新保存地區(qū)關(guān)聯(lián)信息
  * @date 2019年2月21日上午11:17:10
  * @return
  */
 
 @RequestMapping("/batchSaveTipsAreaConfig")
 @ResponseBody
 public ResultModel batchSaveTipsConfig(ApprTipsRelatedModel relatedModel) {
 
  List<ApprTipsRelatedModel> areaTipsList = new ArrayList<ApprTipsRelatedModel>();
 
  //封裝批量更新的地區(qū)列表
 
  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);
 
 }
 
  //批量更新新增數(shù)據(jù)
 
  try {
 
   this.tipsConfigService.batchSaveTipsRelatedConfig(areaTipsList);
 
   return ResultModel.success("保存成功");
 
  } catch(Exception e) {
 
   logger.error("批量綁定地區(qū)異常:{}"+e);
 
   throw new SuperControllerException();
 
  }
 
 }

注意要點:

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

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有空格導(dǎo)致的,所以使用merge函數(shù)不用隨便加空格,不然會報錯的

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Oracle EBS工具選項:關(guān)閉其他表單修改方法

    Oracle EBS工具選項:關(guān)閉其他表單修改方法

    這篇文章主要介紹了Oracle EBS工具選項關(guān)閉其他表單修改方法,包括通過SQL語句永久打開或關(guān)閉這個選項的方法,需要的朋友可以了解下。
    2017-09-09
  • Oracle提高sql執(zhí)行效率的心得建議

    Oracle提高sql執(zhí)行效率的心得建議

    sql執(zhí)行效率一直都是為人所關(guān)注,那到底應(yīng)該怎樣提高呢?有什么比較好的方法,下面與大家分享下比較不錯的建議,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • 查詢Oracle中正在執(zhí)行和執(zhí)行過的SQL語句

    查詢Oracle中正在執(zhí)行和執(zhí)行過的SQL語句

    這篇文章主要介紹了查詢Oracle中正在執(zhí)行和執(zhí)行過的SQL語句,需要的朋友可以參考下
    2016-10-10
  • Oracle12c圖形化&靜默安裝踩坑的方法步驟

    Oracle12c圖形化&靜默安裝踩坑的方法步驟

    這篇文章主要介紹了Oracle12c圖形化&靜默安裝踩坑的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 解決oracle用戶連接失敗的解決方法

    解決oracle用戶連接失敗的解決方法

    oracle用戶連接失敗的問題著實讓我們頭疼,下面就為您介紹oracle用戶連接失敗的解決方法,希望對您學(xué)習(xí)oracle用戶連接方面能有所幫助。
    2010-12-12
  • Oracle日常維護(hù)中管理用戶以及重做日志文件的方法

    Oracle日常維護(hù)中管理用戶以及重做日志文件的方法

    這篇文章主要介紹了Oracle日常維護(hù)中管理用戶以及重做日志文件的方法,是Oracle入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-12-12
  • Oracle 11g收集多列統(tǒng)計信息詳解

    Oracle 11g收集多列統(tǒng)計信息詳解

    我們在寫SQL語句的時候,有的時候會碰到where子句后面有多個條件的情況,也就是根據(jù)多列的條件篩選得到數(shù)據(jù)。下面這篇文章主要給大家介紹了Oracle 11g收集多列統(tǒng)計信息的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-03-03
  • oracle中行轉(zhuǎn)列LISTAGG()函數(shù)詳解及應(yīng)用實例

    oracle中行轉(zhuǎn)列LISTAGG()函數(shù)詳解及應(yīng)用實例

    這篇文章主要給大家介紹了關(guān)于oracle中行轉(zhuǎn)列LISTAGG()函數(shù)詳解及應(yīng)用實例的相關(guān)資料,stagg是oracle11.2增加的特性,功能類似wmsys.wm_concat函數(shù),即將數(shù)據(jù)分組后,把指定列的數(shù)據(jù)通過指定符號合并,需要的朋友可以參考下
    2024-05-05
  • Oracle輕松取得建表和索引的DDL語句

    Oracle輕松取得建表和索引的DDL語句

    Oracle輕松取得建表和索引的DDL語句...
    2007-04-04
  • Oracle的SYS_GUID()函數(shù)用法及說明

    Oracle的SYS_GUID()函數(shù)用法及說明

    這篇文章主要介紹了Oracle的SYS_GUID()函數(shù)用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論

卢湾区| 宜丰县| 乐陵市| 周至县| 临猗县| 阳高县| 太和县| 茂名市| 中山市| 宜君县| 松潘县| 页游| 秦皇岛市| 珠海市| 岑巩县| 平塘县| 乡城县| 内乡县| 建阳市| 蓝山县| 沾化县| 宝应县| 长治市| 珲春市| 滨海县| 沿河| 秦皇岛市| 高清| 汕尾市| 东阿县| 满城县| 云浮市| 江西省| 阳高县| 海丰县| 河东区| 安顺市| 固阳县| 县级市| 象山县| 湟源县|