日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle数据库数据合并,Oracle合并数据

發布時間:2023/12/14 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle数据库数据合并,Oracle合并数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇文章幫大家學習Oracle合并數據,包含了Oracle合并數據使用方法、操作技巧、實例演示和注意事項,有一定的學習價值,大家可以用來參考。

在本教程中將學習如何使用Oracle MERGE語句來執行更新或基于指定條件插入數據。

Oracle MERGE語句簡介

Oracle MERGE語句從一個或多個源表中選擇數據并更新或將其插入到目標表中。 MERGE語句可指定一個條件來確定是更新數據還是將數據插入到目標表中。

以下說明了Oracle MERGE語句的語法:

MERGE INTO target_table

USING source_table

ON search_condition

WHEN MATCHED THEN

UPDATE SET col1 = value1, col2 = value2,...

WHERE

[DELETE WHERE ]

WHEN NOT MATCHED THEN

INSERT (col1,col2,...)

values(value1,value2,...)

WHERE ;

下面來仔細看看上面MERGE語句的語法:

首先,指定要在INTO子句中更新或插入的目標表(target_table)。

其次,指定要更新或插入USING子句中的數據源(source_table)。

第三,指定合并操作在ON子句中更新或插入的搜索條件。

對于目標表中的每一行,Oracle都會評估搜索條件:

如果結果為true,則Oracle使用源表(source_table)中的相應數據更新該行。

如果任何行的結果為false,則Oracle將源表(source_table)中相應的行插入到目標表(target_table)中。

當想要在單個操作中組合多個INSERT,UPDATE和DELETE語句時,MERGE語句變得很方便。

因為MERGE是確定性語句,所以不能在同一個MERGE語句中多次更新目標表的同一行。

可以將一個可選的DELETE WHERE子句添加到MATCHED子句中,以在合并操作之后進行清理。 DELETE子句只刪除目標表中與ON和DELETE WHERE子句匹配的行。

Oracle MERGE前提條件

要執行MERGE語句,必須在源表上具有INSERT和UPDATE對象權限。 如果使用DELETE子句,則還必須在目標表上具有DELETE對象特權。

Oracle MERGE示例

假設有兩個表:members和member_staging。

每當有一個新會員信息時,則插入一個新的行記錄到members表。 然后,members表中的數據將與member_staging表的數據合并。

以下語句用于創建members和member_staging表:

CREATE TABLE members (

member_id NUMBER PRIMARY KEY,

first_name VARCHAR2(50) NOT NULL,

last_name VARCHAR2(50) NOT NULL,

rank VARCHAR2(20)

);

CREATE TABLE member_staging AS

SELECT * FROM members;

使用以下INSERT語句將示例數據插入到members和member_staging表中:

-- insert into members table

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(1,'Abel','Wolf','Gold');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(2,'Clarita','Franco','Platinum');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(3,'Darryl','Giles','Silver');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(4,'Dorthea','Suarez','Silver');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(5,'Katrina','Wheeler','Silver');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(6,'Lilian','Garza','Silver');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(7,'Ossie','Summers','Gold');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(8,'Paige','Mcfarland','Platinum');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(9,'Ronna','Britt','Platinum');

INSERT INTO members(member_id, first_name, last_name, rank) VALUES(10,'Tressie','Short','Bronze');

-- insert into member_staging table

INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(1,'Abel','Wolf','Silver');

INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(2,'Clarita','Franco','Platinum');

INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(3,'Darryl','Giles','Bronze');

INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(4,'Dorthea','Gate','Gold');

INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(5,'Katrina','Wheeler','Silver');

INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(6,'Lilian','Stark','Silver');

將members表中的數據更新到member_staging表時,應該執行以下操作:

更新成員id為1,3,4和6的行記錄,因為表中這些成員的排名或姓氏是不同的。

要插入成員id為7到10的行記錄,這是因為這些行存在于members表中,但不存在于member_staging表中。

總共有8行數據需要合并。參考以下圖示 -

以下是一次性執行所有這些操作的MERGE語句。

MERGE INTO member_staging x

USING (SELECT member_id, first_name, last_name, rank FROM members) y

ON (x.member_id = y.member_id)

WHEN MATCHED THEN

UPDATE SET x.first_name = y.first_name,

x.last_name = y.last_name,

x.rank = y.rank

WHERE x.first_name <> y.first_name OR

x.last_name <> y.last_name OR

x.rank <> y.rank

WHEN NOT MATCHED THEN

INSERT(x.member_id, x.first_name, x.last_name, x.rank)

VALUES(y.member_id, y.first_name, y.last_name, y.rank);

merge語句根據member_id列中的值(參見上面的ON子句),將member表中的每一行與member_staging表中的每一行進行比較。

如果兩個表的member_id列中的值相等,MERGE語句只有在兩個表的first_name,last_name或rank列的不值時,才將members表中的first_name,last_name或rank列的不值作為member_staging對應列的值來更新,否則它將members的行直接插入member_staging表。

Oracle按照預期返回了8行合并數據。

在本教程中,您已學習如何使用Oracle MERGE語句根據指定的條件更新或插入數據。

總結

以上是生活随笔為你收集整理的oracle数据库数据合并,Oracle合并数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。