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

Oracle 數(shù)據(jù)倉庫ETL技術(shù)之多表插入語句的示例詳解

 更新時間:2021年04月12日 10:27:05   作者:不剪發(fā)的Tony老師  
Oracle 數(shù)據(jù)庫為 ETL 流程提供了豐富的功能,今天我們就給大家介紹一下 Oracle 多表插入語句,也就是 INSERT ALL 語句,今天通過示例代碼給大家介紹Oracle 數(shù)據(jù)倉庫 ETL 技術(shù)之多表插入語句的相關(guān)知識,感興趣的朋友一起看看吧

dwh

大家好!我是只談技術(shù)不剪發(fā)的 Tony 老師。

ETL(提取、轉(zhuǎn)換、加載)是指從源系統(tǒng)中提取數(shù)據(jù)并將其放入數(shù)據(jù)倉庫的過程。Oracle 數(shù)據(jù)庫為 ETL 流程提供了豐富的功能,今天我們就給大家介紹一下 Oracle 多表插入語句,也就是INSERT ALL 語句。

創(chuàng)建示例表

我們首先創(chuàng)建一個源數(shù)據(jù)表和三個目標(biāo)表:

CREATE TABLE src_table(
  id INTEGER NOT NULL PRIMARY KEY,
  name VARCHAR2(10) NOT NULL
);
INSERT INTO src_table VALUES (1, '張三');
INSERT INTO src_table VALUES (2, '李四');
INSERT INTO src_table VALUES (3, '王五');

CREATE TABLE tgt_t1 AS
SELECT * FROM src_table WHERE 1=0;

CREATE TABLE tgt_t2 AS
SELECT * FROM src_table WHERE 1=0;

CREATE TABLE tgt_t3 AS
SELECT * FROM src_table WHERE 1=0;

無條件的 INSERT ALL 語句

INSERT ALL 語句可以用于將多行輸入插入一個或者多個表中,因此也被稱為多表插入語句。第一種形式的 INSERT ALL 語句是無條件的插入語句,源數(shù)據(jù)中的每一行數(shù)據(jù)都會被插入到每個目標(biāo)表中。例如:

INSERT ALL
  INTO tgt_t1(id, name) VALUES(id, name)
  INTO tgt_t2(id, name) VALUES(id, name)
  INTO tgt_t3(id, name) VALUES(id, name)
SELECT * FROM src_table;

SELECT * FROM tgt_t1;
ID|NAME  |
--|------|
 1|張三  |
 2|李四  |
 3|王五  |

SELECT * FROM tgt_t2;
ID|NAME  |
--|------|
 1|張三  |
 2|李四  |
 3|王五  |

SELECT * FROM tgt_t3;
ID|NAME  |
--|------|
 1|張三  |
 2|李四  |
 3|王五  |

執(zhí)行以上多表插入語句之后,三個目標(biāo)表中都生成了 3 條記錄。

我們也可以多次插入相同的表,實現(xiàn)一個插入語句插入多行數(shù)據(jù)的效果。例如:

TRUNCATE TABLE tgt_t1;

INSERT ALL
  INTO tgt_t1(id, name) VALUES(4, '趙六')
  INTO tgt_t1(id, name) VALUES(5, '孫七')
  INTO tgt_t1(id, name) VALUES(6, '周八')
SELECT 1 FROM dual;

SELECT * FROM tgt_t1;
ID|NAME  |
--|------|
 4|趙六  |
 5|孫七  |
 6|周八  |

在以上插入語句中,tgt_t1 出現(xiàn)了三次,最終在該表中插入了 3 條記錄。這種語法和其他數(shù)據(jù)庫中的以下多行插入語句效果相同:

-- MySQL、SQL Server、PostgreSQL以及SQLite
INSERT INTO tgt_t1(id, name)
VALUES(4, '趙六'), (5, '孫七'), (6, '周八');

另外,這種無條件的 INSERT ALL 語句還可以實現(xiàn)列轉(zhuǎn)行(PIVOT)的功能。例如:

CREATE TABLE src_pivot(
  id INTEGER NOT NULL PRIMARY KEY,
  name1 VARCHAR2(10) NOT NULL,
  name2 VARCHAR2(10) NOT NULL,
  name3 VARCHAR2(10) NOT NULL
);
INSERT INTO src_pivot VALUES (1, '張三', '李四', '王五');

TRUNCATE TABLE tgt_t1;

INSERT ALL
  INTO tgt_t1(id, name) VALUES(id, name1)
  INTO tgt_t1(id, name) VALUES(id, name2)
  INTO tgt_t1(id, name) VALUES(id, name3)
SELECT * FROM src_pivot;

SELECT * FROM tgt_t1;
ID|NAME  |
--|------|
 1|張三  |
 1|李四  |
 1|王五  |

src_pivot 表中包含了 3 個名字字段,我們通過 INSERT ALL 語句將其轉(zhuǎn)換 3 行記錄。

有條件的 INSERT ALL 語句

第一種形式的 INSERT ALL 語句是有條件的插入語句,可以將滿足不同條件的數(shù)據(jù)插入不同的表中。例如:

TRUNCATE TABLE tgt_t1;
TRUNCATE TABLE tgt_t2;
TRUNCATE TABLE tgt_t3;

INSERT ALL
  WHEN id <= 1 THEN
    INTO tgt_t1(id, name) VALUES(id, name)
  WHEN id BETWEEN 1 AND 2 THEN
    INTO tgt_t2(id, name) VALUES(id, name)
  ELSE
    INTO tgt_t3(id, name) VALUES(id, name)
SELECT * FROM src_table;

SELECT * FROM tgt_t1;
ID|NAME  |
--|------|
 1|張三  |
 
SELECT * FROM tgt_t2;
ID|NAME  |
--|------|
 1|張三  |
 2|李四  |

SELECT * FROM tgt_t3;
ID|NAME  |
--|------|
 3|王五  |

tgt_t1 中插入了 1 條數(shù)據(jù),因為 id 小于等于 1 的記錄只有 1 個。tgt_t2 中插入了 2 條數(shù)據(jù),包括 id 等于 1 的記錄。也就是說,前面的 WHEN 子句不會影響后續(xù)的條件判斷,每個條件都會單獨進(jìn)行判斷。tgt_t3 中插入了 1 條數(shù)據(jù),ELSE 分支只會插入不滿足前面所有條件的數(shù)據(jù)。

📝有條件的多表插入語句最多支持 127 個 WHEN 子句。

有條件的 INSERT FIRST 語句

有條件的 INSERT FIRST 的原理和 CASE 表達(dá)式類似,只會執(zhí)行第一個滿足條件的插入語句,然后繼續(xù)處理源數(shù)據(jù)中的其他記錄。例如:

TRUNCATE TABLE tgt_t1;
TRUNCATE TABLE tgt_t2;
TRUNCATE TABLE tgt_t3;

INSERT FIRST
  WHEN id <= 1 THEN
    INTO tgt_t1(id, name) VALUES(id, name)
  WHEN id BETWEEN 1 AND 2 THEN
    INTO tgt_t2(id, name) VALUES(id, name)
  ELSE
    INTO tgt_t3(id, name) VALUES(id, name)
SELECT * FROM src_table;

SELECT * FROM tgt_t1;
ID|NAME  |
--|------|
 1|張三  |
 
SELECT * FROM tgt_t2;
ID|NAME  |
--|------|
 2|李四  |

SELECT * FROM tgt_t3;
ID|NAME  |
--|------|
 3|王五  |

以上語句和上一個示例的差別在于源數(shù)據(jù)中的每個記錄只會插入一次,tgt_t2 中不會插入 id 等于 1 的數(shù)據(jù)。

多表插入語句的限制

Oracle 多表插入語句存在以下限制:

  • 多表插入只能針對表執(zhí)行插入操作,不支持視圖或者物化視圖。
  • 多表插入語句不能通過 DB Link 針對遠(yuǎn)程表執(zhí)行插入操作。
  • 多表插入語句不能通針對嵌套表執(zhí)行插入操作。
  • 所有 INSERT INTO 子句中的字段總數(shù)量不能超過 999 個。
  • 多表插入語句中不能使用序列。多表插入語句被看作是單個語句,因此只會產(chǎn)生一個序列值并且用于所有的數(shù)據(jù)行,這樣會導(dǎo)致數(shù)據(jù)問題。
  • 多表插入語句不能和執(zhí)行計劃穩(wěn)定性功能一起使用。
  • 如果任何目標(biāo)并使用了 PARALLEL 提示,整個語句都會被并行化處理。如果沒有目標(biāo)表使用 PARALLEL 提示,只有定義了 PARALLEL 屬性的目標(biāo)表才會被并行化處理。
  • 如果多表插入語句中的任何表是索引組織表,或者定義了位圖索引,都不會進(jìn)行并行化處理。

到此這篇關(guān)于Oracle 數(shù)據(jù)倉庫 ETL 技術(shù)之多表插入語句的示例詳解的文章就介紹到這了,更多相關(guān)Oracle 多表插入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle存儲過程基本語法介紹

    Oracle存儲過程基本語法介紹

    Oracle存儲過程基本語法介紹,有需求的朋友可以參考下
    2012-11-11
  • oracle em 按鈕亂碼解決辦法及em網(wǎng)頁變成英文

    oracle em 按鈕亂碼解決辦法及em網(wǎng)頁變成英文

    oracle em 按鈕亂碼,該問題很是麻煩啊,不過本文介紹了一些解決方法,有需要的你可千萬不要錯過啊,好了,話不多說切入主題
    2013-01-01
  • 在Oracle中實現(xiàn)數(shù)據(jù)加密的詳細(xì)步驟和方法

    在Oracle中實現(xiàn)數(shù)據(jù)加密的詳細(xì)步驟和方法

    在Oracle數(shù)據(jù)庫中實現(xiàn)數(shù)據(jù)加密是一項重要的安全措施,它可以保護(hù)存儲在數(shù)據(jù)庫中的敏感信息不被未授權(quán)訪問,Oracle提供了多種數(shù)據(jù)加密方法,以下是一些在Oracle中實現(xiàn)數(shù)據(jù)加密的詳細(xì)步驟和方法,需要的朋友可以參考下
    2024-09-09
  • oracle日期時間型timestamp的深入理解

    oracle日期時間型timestamp的深入理解

    本篇文章是對oracle中日期時間型timestamp函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • oracle導(dǎo)出sql語句的結(jié)果集和保存執(zhí)行的sql語句(深入分析)

    oracle導(dǎo)出sql語句的結(jié)果集和保存執(zhí)行的sql語句(深入分析)

    本篇文章是對oracle導(dǎo)出sql語句的結(jié)果集與保存執(zhí)行的sql語句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Oracle定義聯(lián)合數(shù)組及使用技巧

    Oracle定義聯(lián)合數(shù)組及使用技巧

    聯(lián)合數(shù)組以前被稱為PL/SQL表。在表中不能使用聯(lián)合數(shù)組,只能將它們用作程序設(shè)計的結(jié)構(gòu)體。只能在PL/SQL中訪問聯(lián)合數(shù)組
    2012-11-11
  • Oracle數(shù)據(jù)庫如何將DATE類型字段格式轉(zhuǎn)換為YYYY/MM/DD

    Oracle數(shù)據(jù)庫如何將DATE類型字段格式轉(zhuǎn)換為YYYY/MM/DD

    在Oracle數(shù)據(jù)庫中,盡管DATE類型本身并不攜帶任何特定的格式信息,但通過TO_CHAR函數(shù)我們可以方便地將DATE類型的數(shù)據(jù)轉(zhuǎn)換為我們所需要的格式,下面給大家介紹Oracle數(shù)據(jù)庫如何將DATE類型字段格式轉(zhuǎn)換為YYYY/MM/DD樣式,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • oracle正則表達(dá)式多項匹配時相似項有優(yōu)先級詳解

    oracle正則表達(dá)式多項匹配時相似項有優(yōu)先級詳解

    這篇文章主要給大家介紹了關(guān)于oracle正則表達(dá)式多項匹配時相似項有優(yōu)先級的相關(guān)資料,Oracle中使用正則表達(dá)式需先使用REGEXP_LIKE函數(shù)來匹配字符串,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Oracle中的觸發(fā)器trigger

    Oracle中的觸發(fā)器trigger

    這篇文章介紹了Oracle中的觸發(fā)器trigger,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • centos 6.5下安裝oracle 11gR2與Oracle自動啟動的配置

    centos 6.5下安裝oracle 11gR2與Oracle自動啟動的配置

    CentOS 下安裝 Oracle 是一件比較麻煩的事情,下面這篇文章主要介紹了在 centos 6.5下安裝oracle 11gR2的前的配置步驟,以及安裝完成后,如何設(shè)置為隨系統(tǒng)自動啟動。配置完成后,啟動圖形化安裝,沒有什么可說的,本文就沒有一一截圖。需要的朋友可以參考借鑒。
    2017-01-01

最新評論