從Oracle資料庫中讀取資料自動生成INSERT語句的方法
阿新 • • 發佈:2020-01-09
Oracle INSERT 語句
方法1
我估計有點 SQL 基礎的人都會寫 INSERT 語句。下面是 SQL 標準寫法。
INSERT INTO employees (employee_id,name) VALUES (1,'Zhangsan'); INSERT INTO employees VALUES (1,'Shangbo');
方法2
其實, Oracle 還支援下面的寫法,作用和上面的語句完全相同。
INSERT INTO (SELECT employee_id,name FROM employees) VALUES (2,'Lisi');
方法3
此外,同其他資料庫一樣,Oracle 也支援下面這種寫法。
INSERT INTO employees SELECT 3,'Wangwu' FROM DUAL;
方法4
下面這種寫法可以實現列轉行,如我們有下面的表儲存原始資料,原始資料可能從檔案中來。
create table sales_input_table ( prod_id number(9,0),amt_mon number(9,6),amt_tue number(9,amt_wed number(9,amt_thu number(9,amt_fri number(9,6) ); insert into sales_input_table values (1,100.0,200.0,300.0,400.0,500.0);
下面我們通過一個 SQL 把上面的資料插入到下面的表中實現列轉行。
CREATE TABLE sales ( prod_id number(9,time_id date,amount number(9,0) ); INSERT ALL INTO sales (prod_id,time_id,amount) VALUES (prod_id,CURRENT_DATE,amt_mon) INTO sales (prod_id,CURRENT_DATE + 1,amt_tue) INTO sales (prod_id,CURRENT_DATE + 2,amt_wed) INTO sales (prod_id,CURRENT_DATE + 3,amt_thu) INTO sales (prod_id,CURRENT_DATE + 4,amt_fri) SELECT prod_id,amt_mon,amt_tue,amt_wed,amt_thu,amt_fri FROM sales_input_table;
方法5
下面這種寫法可以幫我們一次性把一個表中的資料倒入到多個表中,否則我們必須寫多條 SQL 實現同樣的功能。
INSERT ALL WHEN order_total <= 100000 THEN INTO small_orders WHEN order_total > 100000 AND order_total <= 200000 THEN INTO medium_orders WHEN order_total = 500000 THEN INTO special_orders WHEN order_total > 200000 THEN INTO large_orders ELSE INTO large_orders SELECT order_id,order_total,sales_rep_id,customer_id FROM orders;
注意,當 order_total 大於 200000 時,orders 會被插入到 large_orders 和 special_orders 中。這可能不是你想要的結果,如果你只想讓 orders 插入到 special_orders 表中,你只需要把 ALL 替換成 FIRST, 如下。
INSERT FIRST WHEN order_total <= 100000 THEN INTO small_orders WHEN order_total > 100000 AND order_total <= 200000 THEN INTO medium_orders WHEN order_total = 500000 THEN INTO special_orders WHEN order_total > 200000 THEN INTO large_orders ELSE INTO large_orders SELECT order_id,customer_id FROM orders;
從Oracle資料庫中讀取資料,自動生成INSERT語句
建立表
-- Create table create table TB_ACCIDENT_TYPE ( ID NUMBER(20) not null,NAME VARCHAR2(50),PATH VARCHAR2(20),PARENTPATH VARCHAR2(20),URL VARCHAR2(20),TYPE VARCHAR2(2),DESCR VARCHAR2(50) )
顯示錶中的資料
select 'INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR) VALUES(' || '''' || ID ||'''' || ',' || '''' || NAME || '''' || ',' || '''' || PATH || '''' || ',' || '''' || PARENTPATH || '''' || ',' || '''' || URL || '''' || ',' || '''' || TYPE || '''' || ',' || '''' || DESCR || '''' || ');' From tb_accident_type order by ID
顯示結果
INSERT INTO tb_accident_type (ID,DESCR) VALUES('1','事故型別關聯 ','1','0','','');INSERT INTO tb_accident_type (ID,DESCR) VALUES('2','危險源型別關聯','2',DESCR) VALUES('3','危險品型別關聯','3',DESCR) VALUES('4','生產企業型別關聯','4',DESCR) VALUES('5','區域關聯','5',DESCR) VALUES('568','物體打擊','1.1','物體打擊');INSERT INTO tb_accident_type (ID,DESCR) VALUES('569','車輛傷害','1.2','車輛傷害');INSERT INTO tb_accident_type (ID,DESCR) VALUES('570','機器傷害','1.3','機器傷害');INSERT INTO tb_accident_type (ID,DESCR) VALUES('571','起重傷害','1.4','起重傷害');INSERT INTO tb_accident_type (ID,DESCR) VALUES('572','觸電','1.5','觸電');INSERT INTO tb_accident_type (ID,DESCR) VALUES('573','淹溺','1.6','淹溺');INSERT INTO tb_accident_type (ID,DESCR) VALUES('574','灼燙','1.7','灼燙');INSERT INTO tb_accident_type (ID,DESCR) VALUES('575','火災','1.8','火災');INSERT INTO tb_accident_type (ID,DESCR) VALUES('576','高處墜落','1.9','高處墜落');INSERT INTO tb_accident_type (ID,DESCR) VALUES('577','坍塌','1.10','坍塌');INSERT INTO tb_accident_type (ID,DESCR) VALUES('578','冒頂片幫','1.11','冒頂片幫');INSERT INTO tb_accident_type (ID,DESCR) VALUES('580','透水','1.12','透水');INSERT INTO tb_accident_type (ID,DESCR) VALUES('581','波炮','1.13','波炮');INSERT INTO tb_accident_type (ID,DESCR) VALUES('582','火藥爆炸','1.14','火藥爆炸')INSERT INTO tb_accident_type (ID,DESCR) VALUES('583','瓦斯爆炸','1.15','瓦斯爆炸');
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。如果你想了解更多相關內容請檢視下面相關連結