亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

oracle中的replace?into使用及說明

 更新時(shí)間:2024年06月20日 17:00:48   作者:閏土和猹。  
這篇文章主要介紹了oracle中的replace?into使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

oracle中的replace into

Mybaitis foreach批量insert以及配合oracle merge into函數(shù),批量update和insert

oracle中相當(dāng)于mysql的replace into函數(shù):merge into

  • 因?yàn)樽髡呤褂脟?guó)產(chǎn)的神通數(shù)據(jù)庫(kù) 寫法與oracle相同 沒辦法使用mysql的replace into實(shí)現(xiàn)插入
  • 使用merge into來代替 不太推薦使用這個(gè) 能不用盡量不用吧

使用方法

普通使用

  • xml中
<update id="mergeStudents" parameterType="com.alibaba.dto.StudentDTO">
		merge into t_student a
		using
		(
			SELECT
			#{id} as id,
			#{name} as name,
			#{age} as age
			FROM dual
		) b
		on (
		a.id= b.id
		)
		when matched then
		UPDATE SET
		a.name= b.name,
		a.age=b.age
		when not matched then
		INSERT(
		a.id,
		a.name,
		a.age
		) VALUES(
		b.id,
		b.name,
		b.age
		)
	</update>

加上foreach

<update id="mergeStudents" parameterType="com.alibaba.dto.StudentDTO">
		merge into t_student a
		using
		(
		<foreach collection="stus" item="item" index="index" open=""
				 close="" separator="union all">
			SELECT
			#{item.id,jdbcType=VARCHAR} as id,
			#{item.name,jdbcType=VARCHAR} as name,
			#{item.age,jdbcType=VARCHAR} as age
			FROM dual
		</foreach>
		) b
		on (
		a.id= b.id
		)
		when matched then
		UPDATE SET
		a.name= b.name,
		a.age=b.age
		when not matched then
		INSERT(
		a.id,
		a.name,
		a.age
		) VALUES(
		b.id,
		b.name,
		b.age
		)
	</update>

弊端:

mybatis會(huì)報(bào)一個(gè)解析不了的語(yǔ)法錯(cuò)誤 但不影響實(shí)際結(jié)果 解決辦法暫未發(fā)現(xiàn)

com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'merge into

也算mybatis的bug吧 沒有update與insert都兼容的標(biāo)簽

用oracle的merge實(shí)現(xiàn)mysql的replace into

mysql

mysql有一個(gè)replace into的dml語(yǔ)句,類似insert,但是會(huì)在insert之前檢查表的唯一索引或主鍵。如果存在,就改為update操作。

這在很多應(yīng)用中是一個(gè)很常用的操作。有了這個(gè)replace into ,就可以將一個(gè) select后判斷后做update or insert改為一句話,甚是方便。

Oracle

Oracle9i引入了MERGE命令,你能夠在一個(gè)SQL語(yǔ)句中對(duì)一個(gè)表同時(shí)執(zhí)行inserts和upda tes操作. MERGE命令從一個(gè)或多個(gè)數(shù)據(jù)源中選擇行來updating或inserting到一個(gè)或多個(gè)表.在Oracle 10g中MERGE有如下一些改進(jìn):

1、UPDATE或INSERT子句是可選的

2、UPDATE和INSERT子句可以加WHERE子句

3、在ON條件中使用常量過濾謂詞來insert所有的行到目標(biāo)表中,不需要連接源表和目標(biāo)表

4、UPDATE子句后面可以跟DELETE子句來去除一些不需要的行

5、源表就是using關(guān)鍵字后面跟的表,目標(biāo)表就是將要被merge into的表

6、merge into 中所有的update、insert、delete都是針對(duì)目標(biāo)表來操作的。由于merge into已經(jīng)制定了操作的表,所以u(píng)pdate、insert、delete都不需要再顯示指出表名

作用:merge into 解決用B表跟新A表數(shù)據(jù),如果A表中沒有,則把B表的數(shù)據(jù)插入A表;

語(yǔ)法

MERGE INTO [your table-name] [rename your table here]  
USING ( [write your query here] )[rename your query-sql and using just like a table]  
ON ([conditional expression here] AND [...]...)  
WHEN MATHED THEN [here you can execute some update sql or something else ]  
WHEN NOT MATHED THEN [execute something else here ! ]  

sql demo

如下所示:

merge into qq a  
using (select '2022' company_no, 'cname' company_name from qq where rownum<2) b  
on (a.company_no = b.company_no)  
WHEN MATCHED THEN  
  UPDATE SET a.company_name = a.company_name|| 'a'  
WHEN NOT MATCHED THEN  
  INSERT  
    (a.company_no, a.company_name)  
  VALUES  
    (b.company_no, b.company_name);  

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用PLSQL遠(yuǎn)程連接Oracle數(shù)據(jù)庫(kù)的方法(內(nèi)網(wǎng)穿透)

    使用PLSQL遠(yuǎn)程連接Oracle數(shù)據(jù)庫(kù)的方法(內(nèi)網(wǎng)穿透)

    Oracle數(shù)據(jù)庫(kù)來源于知名大廠甲骨文公司,是一款通用數(shù)據(jù)庫(kù)系統(tǒng),能提供完整的數(shù)據(jù)管理功能,而Oracle數(shù)據(jù)庫(kù)時(shí)關(guān)系數(shù)據(jù)庫(kù)的典型代表,其數(shù)據(jù)關(guān)系設(shè)計(jì)完備,這篇文章主要介紹了使用PLSQL遠(yuǎn)程連接Oracle數(shù)據(jù)庫(kù)的方法(內(nèi)網(wǎng)穿透),需要的朋友可以參考下
    2023-03-03
  • oracle10g全文索引自動(dòng)同步語(yǔ)句使用方法

    oracle10g全文索引自動(dòng)同步語(yǔ)句使用方法

    這篇文章主要介紹了oracle10g全文索引自動(dòng)同步語(yǔ)句使用方法,需要的朋友可以參考下
    2014-03-03
  • Oracle DBA常用語(yǔ)句

    Oracle DBA常用語(yǔ)句

    Oracle DBA常用語(yǔ)句,對(duì)于表空間大小等查看都是不錯(cuò)的sql語(yǔ)句。
    2009-08-08
  • Oracle數(shù)據(jù)庫(kù)常見字段類型大全以及超詳細(xì)解析

    Oracle數(shù)據(jù)庫(kù)常見字段類型大全以及超詳細(xì)解析

    在Oracle數(shù)據(jù)庫(kù)中查詢特定表的字段個(gè)數(shù)通常需要使用SQL語(yǔ)句來完成,這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)常見字段類型大全以及超詳細(xì)解析,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Oracle遞歸查詢connect?by用法

    Oracle遞歸查詢connect?by用法

    本文詳細(xì)講解了Oracle遞歸查詢connect?by的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 提升Oracle用戶密碼安全性的策略

    提升Oracle用戶密碼安全性的策略

    最近遇到這樣的客戶需求,數(shù)據(jù)庫(kù)中有很多業(yè)務(wù)用戶名,客戶期望密碼設(shè)置不要過于簡(jiǎn)單,最起碼別和用戶名一致或相似就好。怎么解決這個(gè)需求呢?下面小編給大家?guī)砹颂嵘齇racle用戶密碼安全性的策略,感興趣的朋友一起看看吧
    2018-04-04
  • oracle存儲(chǔ)過程創(chuàng)建表分區(qū)實(shí)例

    oracle存儲(chǔ)過程創(chuàng)建表分區(qū)實(shí)例

    二種oracle存儲(chǔ)過程創(chuàng)建表分區(qū)實(shí)例
    2013-11-11
  • 裝Oracle用PLSQL連接登錄時(shí)不顯示數(shù)據(jù)庫(kù)的解決

    裝Oracle用PLSQL連接登錄時(shí)不顯示數(shù)據(jù)庫(kù)的解決

    這篇文章主要介紹了裝Oracle用PLSQL連接登錄時(shí)不顯示數(shù)據(jù)庫(kù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Oracle to_char函數(shù)的使用方法

    Oracle to_char函數(shù)的使用方法

    在Oracle數(shù)據(jù)庫(kù)中,to_char函數(shù)是我們最常用的函數(shù)之一,下文對(duì)to_char函數(shù)的應(yīng)用作了詳細(xì)的介紹,如果您感興趣的話,不妨一看
    2014-08-08
  • oracle 觸發(fā)器 實(shí)現(xiàn)出入庫(kù)

    oracle 觸發(fā)器 實(shí)現(xiàn)出入庫(kù)

    出庫(kù)入庫(kù)這樣的功能在許多系統(tǒng)中都有??赡芙蟹ú灰?。有的可能是數(shù)量,有的可能是金額。我這里以金額為例 實(shí)現(xiàn)出庫(kù)入庫(kù)也有許多方法,一種是用語(yǔ)言實(shí)現(xiàn),一種是用觸發(fā)器實(shí)現(xiàn)。它們各有千秋。
    2009-07-07

最新評(píng)論