Oracle學習日記--Oracle中使用單個inert語句實現插入多行記錄

目錄

前言:

問題現象:

問題分析:

解決方法:

1、insert into?... union all句式

2、insert all into ...select 1 from dual句式

總結:


前言:

????????最近項目中使用到了Oracle數據庫,由于Oracle數據庫我已經好幾年沒用過了,最近幾年用的幾乎都是MySQL數據庫。

? ? ? ? 在使用Oracle數據庫編寫SQL語句的過程中,發現了有一些函數、語法、句式是不太熟悉的,或者說是和MySQL有些區別的;因此最近我打算復習一下Oracle,同時在接下來的一段時間內也會不定期更新一些關于Oracle數據庫的學習日記(文章),結合我個人的學習心得,也算是溫故而知新吧,希望能幫助到有需要的同伴。


問題現象:

????????今天在學習中遇到一個問題:

? ? ? ? 如何在Oracle中,使用單個inert語句實現插入多行記錄呢?


問題分析:

? ? ? ?由于最近幾年都是使用MySQL數據庫比較多,因此一開始遇到這個問題的時候,我其實是直接使用了MySQL中語法來解決這個問題的,下面將使用Oracle最經典的鏈接工具【PLSQL Developer】來進行測試,過程如下:

? ? ? ? 先簡單建表:

-- 建表語句
CREATE TABLE BIZ_BREED_INFO (breed_id INTEGER PRIMARY KEY,biz_breed VARCHAR2(255),memo VARCHAR2(255)
);COMMENT ON TABLE BIZ_BREED_INFO IS '業務品種表';
COMMENT ON COLUMN BIZ_BREED_INFO.breed_id IS '品種id';
COMMENT ON COLUMN BIZ_BREED_INFO.biz_breed IS '業務品種名稱';
COMMENT ON COLUMN BIZ_BREED_INFO.memo IS '備注';

? ? ? ? 然后使用一個insert語句插入多行記錄:


INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES 
(1, '稻谷', '用于糧食生產和飼料'),
(2, '小麥', '用于面粉生產和飼料'),
(3, '玉米', '用于飼料、淀粉和乙醇生產'),
(4, '大豆', '用于食用油和蛋白質飼料'),
(5, '棉花', '用于紡織工業'),
(6, '花生', '用于食用油和蛋白質'),
(7, '馬鈴薯', '用于食品和工業淀粉'),
(8, '甘蔗', '用于制糖和乙醇生產'),
(9, '蘋果', '用于鮮食和果汁'),
(10, '橙子', '用于鮮食和果汁'),
(11, '茶葉', '用于飲品和出口'),
(12, '蔬菜', '用于鮮食和加工'),
(13, '奶牛', '用于牛奶生產'),
(14, '豬', '用于肉類生產'),
(15, '雞', '用于蛋和肉類生產'),
(16, '魚類', '用于水產養殖'),
(17, '蝦類', '用于水產養殖'),
(18, '蟹類', '用于水產養殖'),
(19, '蜂產品', '用于蜂蜜、蜂王漿等'),
(20, '煙草', '用于卷煙和其他煙草制品');

????????沒想到一執行就報錯:

????????查了一下發現,原來是Oracle不支持這樣的寫法。

? ? ? ? 雖然我們都知道可以執行多個inert語句來實現多行數據記錄的插入,如下:

INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (1, '稻谷', '用于糧食生產和飼料');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (2, '小麥', '用于面粉生產和飼料');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (3, '玉米', '用于飼料、淀粉和乙醇生產');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (4, '大豆', '用于食用油和蛋白質飼料');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (5, '棉花', '用于紡織工業');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (6, '花生', '用于食用油和蛋白質');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (7, '馬鈴薯', '用于食品和工業淀粉');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (8, '甘蔗', '用于制糖和乙醇生產');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (9, '蘋果', '用于鮮食和果汁');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (10, '橙子', '用于鮮食和果汁');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (11, '茶葉', '用于飲品和出口');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (12, '蔬菜', '用于鮮食和加工');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (13, '奶牛', '用于牛奶生產');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (14, '豬', '用于肉類生產');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (15, '雞', '用于蛋和肉類生產');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (16, '魚類', '用于水產養殖');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (17, '蝦類', '用于水產養殖');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (18, '蟹類', '用于水產養殖');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (19, '蜂產品', '用于蜂蜜、蜂王漿等');
INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (20, '煙草', '用于卷煙和其他煙草制品');

? ? ? ? 但是,難道Oracle并不支持使用單個inert語句實現插入多行記錄嗎?

? ? ? ? 抱著這樣的疑問,我再次搜集了相關資料,才發現其實方法還是有的,只是sql寫起來會顯得很冗余。


解決方法:

1、insert into?... union all句式

????????句式規則如下:

INSERT INTO 表名(字段列表)?
select 字段值列表 from dual?
union all
select 字段值列表 from dual?
union all

......

????????SQL示例如下:

INSERT INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO)
SELECT 1, '稻谷', '用于糧食生產和飼料' FROM DUAL UNION ALL
SELECT 2, '小麥', '用于面粉生產和飼料' FROM DUAL UNION ALL
SELECT 3, '玉米', '用于飼料、淀粉和乙醇生產' FROM DUAL UNION ALL
SELECT 4, '大豆', '用于食用油和蛋白質飼料' FROM DUAL UNION ALL
SELECT 5, '棉花', '用于紡織工業' FROM DUAL UNION ALL
SELECT 6, '花生', '用于食用油和蛋白質' FROM DUAL UNION ALL
SELECT 7, '馬鈴薯', '用于食品和工業淀粉' FROM DUAL UNION ALL
SELECT 8, '甘蔗', '用于制糖和乙醇生產' FROM DUAL UNION ALL
SELECT 9, '蘋果', '用于鮮食和果汁' FROM DUAL UNION ALL
SELECT 10, '橙子', '用于鮮食和果汁' FROM DUAL UNION ALL
SELECT 11, '茶葉', '用于飲品和出口' FROM DUAL UNION ALL
SELECT 12, '蔬菜', '用于鮮食和加工' FROM DUAL UNION ALL
SELECT 13, '奶牛', '用于牛奶生產' FROM DUAL UNION ALL
SELECT 14, '豬', '用于肉類生產' FROM DUAL UNION ALL
SELECT 15, '雞', '用于蛋和肉類生產' FROM DUAL UNION ALL
SELECT 16, '魚類', '用于水產養殖' FROM DUAL UNION ALL
SELECT 17, '蝦類', '用于水產養殖' FROM DUAL UNION ALL
SELECT 18, '蟹類', '用于水產養殖' FROM DUAL UNION ALL
SELECT 19, '蜂產品', '用于蜂蜜、蜂王漿等' FROM DUAL UNION ALL
SELECT 20, '煙草', '用于卷煙和其他煙草制品' FROM DUAL;

????????執行成功:

????????執行成功后記得提交事務:

表數據如下:

2、insert all into ...select 1 from dual句式

? ? ? ? ? ? 句式規則如下:

INSERT ALL
INTO 表名(字段列表) VALUES (字段值列表)
INTO 表名(字段列表) VALUES (字段值列表)
? ? ...
SELECT 1 FROM DUAL;

? ? ? ? 由于在測試完第1種方法后,表中已經插入了20行數據,所以在測試第2種方法之前,需要先刪除掉,執行刪除sql:

? ? ? ? 選擇是,然后提交事務:

????????再次查詢表數據:

? ? ? ? 然后使用第2種句式插入數據,SQL示例如下:


INSERT ALLINTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (1, '稻谷', '用于糧食生產和飼料')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (2, '小麥', '用于面粉生產和飼料')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (3, '玉米', '用于飼料、淀粉和乙醇生產')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (4, '大豆', '用于食用油和蛋白質飼料')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (5, '棉花', '用于紡織工業')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (6, '花生', '用于食用油和蛋白質')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (7, '馬鈴薯', '用于食品和工業淀粉')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (8, '甘蔗', '用于制糖和乙醇生產')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (9, '蘋果', '用于鮮食和果汁')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (10, '橙子', '用于鮮食和果汁')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (11, '茶葉', '用于飲品和出口')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (12, '蔬菜', '用于鮮食和加工')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (13, '奶牛', '用于牛奶生產')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (14, '豬', '用于肉類生產')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (15, '雞', '用于蛋和肉類生產')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (16, '魚類', '用于水產養殖')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (17, '蝦類', '用于水產養殖')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (18, '蟹類', '用于水產養殖')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (19, '蜂產品', '用于蜂蜜、蜂王漿等')INTO BIZ_BREED_INFO (BREED_ID, BIZ_BREED, MEMO) VALUES (20, '煙草', '用于卷煙和其他煙草制品')
SELECT 1 FROM DUAL;

????????執行成功:

????????提交事務:

????????表數據如下:


總結:

? ? ? ? 可以看到在Oracle中,確實是可以通過單個inert語句實現插入多行記錄的!!!

? ? ? ? 但是缺點也很明顯,就是和MySQL的語句相比,SQL代碼???很冗余。尤其是第2種句式,書寫起來的代碼,甚至比直接寫20個insert語句還要多。當然第一種句式書寫起來的代碼和直接寫20個insert語句其實也沒差多少。

????????相信大家都已經了解并學會了在Oracle中使用單個inert語句實現插入多行記錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83376.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LabVIEW 程序運行時內存不足報錯原因

在 LabVIEW 程序開發與運行過程中,內存不足報錯并退出是常見且棘手的問題。這不僅影響程序穩定性,還可能導致數據丟失與系統崩潰。以下從程序設計、硬件資源、系統環境等多維度深入剖析其成因,幫助開發者準確定位并解決問題。 ? 一、程序設…

【GAN網絡入門系列】一,手寫字MINST圖片生成

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒…

Baklib加速企業AI數據智理轉型

Baklib智理AI數據資產 在AI技術深度滲透業務場景的背景下,Baklib通過構建企業級知識中臺架構,重塑了數據資產的治理范式。該平臺采用智能分類引擎與語義分析模型,將分散在郵件、文檔、數據庫中的非結構化數據轉化為標準化的知識單元&#xf…

如何在Windows右鍵新建菜單中添加自定義項,將notepad添加到新建菜單

一、簡介 Windows 右鍵新建菜單的核心管理機制隱藏在注冊表的 HKEY_CLASSES_ROOT 根鍵中。這里存在兩種關鍵注冊表項:文件擴展名項和文件類型項,它們共同構成了新建菜單的完整控制體系。 以常見的.txt文件為例,系統通過以下機制實現新建菜單…

中大型水閘安全監測系統建設實施方案

一、方案背景 隨著科技的不斷進步,水利工程的數字化轉型已經成為提升城市水資源管理效率和增強防洪能力的關鍵。今天,我們將引導您深入了解我國大中型水閘安全監測管理系統的構建方案,探討如何運用先進技術確保國家水安全,提升水利…

Gartner《如何有效融合Data Fabric 與Data Mesh數據戰略》學習心得

在當今數字化時代,數據已成為企業最為重要的戰略資產之一。企業對于高效的數據管理架構的需求日益迫切,以確保能夠從海量數據中提取有價值的信息,支持業務決策和創新。近年來,數據編織(Data Fabric)和數據網格(Data Mesh)成為了數據管理領域的兩個熱門概念,在行業內引…

matlab建立整車模型,求汽車的平順性

在MATLAB中建立整車模型評估汽車平順性,通常采用多自由度振動模型。以下是基于四分之一車模型的詳細步驟和代碼示例,可擴展至整車模型。 1. 四分之一車模型(簡化版) 模型描述 自由度:2個(車身垂直位移 z2…

探究電阻分壓的帶負載能力

我們經常使用兩個電阻去分壓來獲得特定的電壓,那么我是兩個大阻值電阻分壓獲得的電壓驅動能力強,還是小阻值電阻分壓得到的電壓驅動能力強呢? 一、電壓相同時,電流的大小 下面是兩個阻值分壓得到的仿真圖 電路分析: VCC都是5V,探針1和探針2測到的電壓都是1.67V; 根據…

牛客網NC22222:超半的數

牛客網NC22222:超半的數 題目描述 輸入輸出格式 輸入格式: 第一行包含一個整數 n (1 ≤ n ≤ 1000)第二行包含 n 個整數 a_i (1 ≤ a_i ≤ 10^9) 輸出格式: 輸出一個整數,表示出現次數超過一半的那個數 解題思路 這道題目有多種解法&a…

開發日常中的抓包工具經驗談:Charles 抓包工具與其它選項對比

開發日常中的抓包工具經驗談:HTTPS調試怎么選? 在移動開發或Web API聯調時,網絡請求常常成為問題定位的第一難題。尤其是面對加密的 HTTPS 請求,傳統瀏覽器調試工具已顯得力不從心。 我們團隊最近在排查一個安卓應用中的支付延遲…

哈希表實現(1):

1. 哈希: 之前我們的紅黑數的查找是由于左邊小右邊大的原則可以快速的查找,我們這里的哈希表呢? 這里是用過哈希函數把關鍵字key和存儲位置建立一個關聯的映射。 直接定址法(函數函數定義的其中一種): 直…

泰迪杯特等獎案例深度解析:基于多級二值化與CNN回歸的車牌識別系統設計

(第八屆泰迪杯數據挖掘挑戰賽特等獎案例全流程拆解) 一、案例背景與核心挑戰 1.1 行業痛點與場景需求 在智慧交通與無感支付場景中,車牌識別是核心環節。傳統車牌識別系統在復雜光照、污損車牌、多角度傾斜等場景下存在顯著缺陷。根據某智慧油站2024年運營數據顯示,高峰期…

光學變焦和數字變倍模塊不同點概述!

一、光學變焦與數字變倍模塊的不同點 1. 物理基礎 光學變焦:通過調整鏡頭組中鏡片的物理位置改變焦距,實現無損放大。例如,上海墨揚的MF-STAR吊艙采用30倍光學變焦鏡頭,焦距范圍6~180mm,等效焦距可達997mm。 數字…

ECMAScript標準:JavaScript的核心

什么是ECMAScript? ECMAScript(簡稱ES)是一個由ECMA國際(歐洲計算機制造商協會)制定的腳本語言標準,它為JavaScript、JScript和ActionScript等腳本語言提供了基礎規范。JavaScript 可以視為 ECMAScript 的…

小白學AI DeepSeep 部署中的常見問題及解決方法

在部署 DeepSeek(或類似的大模型/AI 系統)時,可能會遇到多種技術或環境相關的問題。以下是常見問題及對應的解決方案,結合實際部署經驗總結: 文章目錄 前言一、 硬件資源不足二、環境配置問題三、模型加載或推理失敗四、網絡或分布式訓練問題五、數據加載或預處理問題六、…

redis數據結構-11(了解 Redis 持久性選項:RDB 和 AOF)

了解 Redis 持久性選項:RDB 和 AOF Redis 提供了多個持久性選項,以確保數據持久性并防止在服務器發生故障或重啟時丟失數據。了解這些選項對于為您的特定使用案例選擇正確的策略、平衡性能和數據安全至關重要。本章節將深入探討 Redis 中的兩種主要持久…

LLaMA-Factory:環境準備

一、硬件和系統 操作系統: Ubuntu 24.04.2 LTS(64位)GPU: NVIDIA RTX 4090 筆記本 GPU,16GB顯存CPU: 建議高性能多核 CPU(如 Intel i7/i9 或 AMD Ryzen 7/9)以支持數據預處理,我的是32核。RAM: 至少 32GB&…

2025 uniapp的請求封裝工具類以及使用【拿來就用】

一、創建一個http請求封裝的js文件,名字自定義:my_http.js /*** 基礎API請求地址(常量,全大寫命名規范)* type {string}* constant*/ let BASE_URL //通過環境來判斷基礎路徑 if (process.env.NODE_ENV development…

Qt應用程序啟動時的一些思路:從單實例到性能優化的處理方案

程序啟動時優化的價值 在桌面軟件開發領域,應用程序的啟動過程就像音樂的序曲,決定了用戶對軟件品質的第一印象。比如首次啟動等待超過3秒時,會讓大多數用戶產生負面看法,而專業工具軟件的容忍閾值甚至更低。Qt框架作為跨平臺開發的利器,其啟動過程的優化不僅關乎用戶體驗…

Node.js入門指南:開啟JavaScript全棧開發之旅

Hi,我是布蘭妮甜 !Node.js讓JavaScript突破了瀏覽器的限制,成為全棧開發的利器。作為基于V8引擎的高性能運行時,它徹底改變了JavaScript只能做前端開發的局面。本文將帶你快速掌握Node.js的核心用法:環境搭建與模塊系統…