Oracle sql批量插入多條數據的實現
Oracle中一次插入多條的方法
在Oracle里面,不支持像mysql那樣直接在后面拼多個記錄。
Oracle中有兩個方法達到批量插入的效果
方法一:采用union all拼接查詢方式
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE) ? ? ? ? ? select 8000,0,'Multi 8000',1 from dual union all select 8001,0,'Multi 8001',1 from dual
方法二:采用insert all的方式
由于insert all方式插入多條時,通過sequence獲取的值是同一個,不會自動獲取多個,所以id需要通過其他方式設置,(我這里采用觸發(fā)器方式自動設置id)
1、創(chuàng)建測試表
create table test_insert( ? ? ? ?data_id number(10) primary key, ? ? ? ?user_name varchar2(30), ? ? ? ?address varchar2(50) )
data_id為主鍵,通過sequence產生主鍵值
2、創(chuàng)建序列
create sequence seq_test_insert? minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1 cache 20;
3、創(chuàng)建觸發(fā)器
通過觸發(fā)器自動給insert語句設置值
create or replace trigger tr_test_insert before insert on test_insert for each row begin ? select seq_test_insert.nextval into :new.data_id from dual; end;?
4、插入數據
insert all? into test_insert(user_name,address) values('aaa','henan') into test_insert(user_name,address) values('bbb','shanghai') into test_insert(user_name,address) values('ccc','beijing') select * from dual;
需要注意的是,在insert all語句里不能直接使用seq_test_insert.nextval,因為即便每個into語句里都加上seq_test_insert.nextval也不會獲得多個值。
另外,insert all還支持往不同的表里插入數據,如:
insert all? into table1(filed1,filed2)values('value1','value2') into table2(字段1,字段2,字段3) values(值1,值2,值3) select * from dual;
Oracle sql 批量插入 Insert all into
描述
Oracle INSERT ALL 語句用來用一個 INSERT 語句添加多行。
該行可以只使用一個SQL命令插入到一個表或多個表。
語法
Oracle INSERT ALL 語法如下:
INSERT ALL ? INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) ? INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) ? INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) SELECT * FROM dual;
參數
MYTABLE 向該表中插入記錄
- column1, column2, column_n 該表中插入的列
- expr1, expr2, … expr_n 該表中插入的值
示例 - 插入到一個表
可以使用 INSERT INTO 語句多個記錄插入到一個表。
例如,如果你想插入3行到成績表,你可以運行下面的SQL語句:
INSERT ALL ? INTO score (s_id, s_name) VALUES (1000, 'ZS') ? INTO score (s_id, s_name) VALUES (2000, 'LS') ? INTO score (s_id, s_name) VALUES (3000, 'WZ') SELECT * FROM dual;
這等同于以下3 INSERT 語句:
INSERT INTO score (s_id, s_name) VALUES (1000, 'ZS'); INSERT INTO score (s_id, s_name) VALUES (2000, 'LS'); INSERT INTO score (s_id, s_name) VALUES (3000, 'WZ');
示例 - 插入到多個表
也可以使用 INSERT ALL 語句將多個行插入多個表中的一個命令。
例如,如果你想插入兩條記錄到成績表一條記錄到課程表,可以運行下面的SQL語句:
INSERT ALL ? INTO score (s_id, s_name) VALUES (1000, 'ZS') ? INTO score (s_id, s_name) VALUES (2000, 'LS') ? INTO course (c_id, c_name, c_time) VALUES (5000, 'Computer', '9:00') SELECT * FROM dual;
這等同于以下3 INSERT 語句:
INSERT INTO score (s_id, s_name) VALUES (1000, 'ZS'); INSERT INTO score (s_id, s_name) VALUES (2000, 'LS'); INSERT INTO course (c_id, c_name, c_time) VALUES (5000, 'Computer', '9:00');
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
oracle中l(wèi)ength、lengthb、substr、substrb函數用法介紹
這篇文章主要介紹了oracle中l(wèi)ength、lengthb、substr、substrb函數用法的相關內容,具有一定參考價值,需要的朋友可以參考下。2017-09-09oracle查詢一天前、幾天前、幾小時前、一小時前的數據以及恢復誤刪的數據
這幾天工作經常需要查詢某天之前的數據,整理了下相關的查詢,下面這篇文章主要給大家介紹了關于oracle查詢一天前、幾天前、幾小時前、一小時前的數據以及恢復誤刪的數據,需要的朋友可以參考下2024-03-03Oracle數倉中判斷時間連續(xù)性的幾種SQL寫法示例
這篇文章主要給大家介紹了關于Oracle數倉中判斷時間連續(xù)性的幾種SQL寫法,文中通過實例代碼介紹的非常詳細,對大家學習或者使用Oracle具有一定的參考學習價值,需要的朋友可以參考下2023-02-02Oracle?VM?VirtualBox?Ubuntu設置共享文件夾方式
這篇文章主要介紹了Oracle?VM?VirtualBox?Ubuntu設置共享文件夾方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06