今天小编就为大家分享一篇关于从Oracle数据库中读取数据自动生成INSERT语句的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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,6),
amt_wed    number(9,6),
amt_thu    number(9,6),
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,0),
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, time_id, amount) VALUES (prod_id, CURRENT_DATE + 1, amt_tue)
INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 2, amt_wed)
INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 3, amt_thu)
INTO sales (prod_id, time_id, amount) VALUES (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, order_total, sales_rep_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,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('1','事故类型关联 ','1','0','','0','');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('2','危险源类型关联','2','0','','','');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('3','危险品类型关联','3','0','','','');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('4','生产企业类型关联','4','0','','','');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('5','区域关联','5','0','','0','');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('568','物体打击','1.1','1','','1','物体打击');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('569','车辆伤害','1.2','1','','1','车辆伤害');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('570','机器伤害','1.3','1','','1','机器伤害');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('571','起重伤害','1.4','1','','1','起重伤害');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('572','触电','1.5','1','','1','触电');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('573','淹溺','1.6','1','','1','淹溺');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('574','灼烫','1.7','1','','1','灼烫');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('575','火灾','1.8','1','','1','火灾');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('576','高处坠落','1.9','1','','1','高处坠落');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('577','坍塌','1.10','1','','1','坍塌');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('578','冒顶片帮','1.11','1','','1','冒顶片帮');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('580','透水','1.12','1','','1','透水');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('581','波炮','1.13','1','','1','波炮');INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('582','火药爆炸','1.14','1','','1','火药爆炸')INSERT INTO tb_accident_type (ID,NAME,PATH,PARENTPATH,URL,TYPE,DESCR)
 VALUES('583','瓦斯爆炸','1.15','1','','1','瓦斯爆炸');

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对爱安网的支持。如果你想了解更多相关内容请查看下面相关链接

最新资讯
蔚来汽车:首任ES6/ES8车主可享受终生免费换电服务

蔚来汽车:首任ES6/ES8

满足条件的蔚来车主,自驾前往任意营运中的换电站,均可享
超50万行代码 腾讯重磅发布全栈机器学习平台Angel 3.0

超50万行代码 腾讯重

一个全栈的机器学习平台,近日悄悄上线了。8月22日,腾讯
首届清华智班30人名单公布:专为AI培养 状元金牌云集

首届清华智班30人名单

今年5月,清华宣布成立”人工智能学堂班“,与姚班地位平
索尼和迪士尼“分手”了 但“蜘蛛侠宇宙”才刚开启

索尼和迪士尼“分手”

索尼、漫威和迪士尼的三方博弈尘埃落定,漫威将不再参与
"窃听风云""通天大盗" 黑客视角了解网络安全风险

"窃听风云""通天大

据统计,目前全国各预警平台平均每天产生的信息网络诈骗
黑洞也是由分子组成的?

黑洞也是由分子组成的

作为宇宙中最神秘的天体,黑洞一般被认为是一种扭曲的时
最新文章
Oracle备库宕机启动的完美解决方案

Oracle备库宕机启动的

这篇文章主要给大家介绍了关于Oracle备库宕机启动的完
Oracle的四道经典面试题分享

Oracle的四道经典面试

这篇文章主要给大家介绍了关于Oracle的四道经典面试题
oracle中利用关键字rownum查询前20名员工信息及rownum用法

oracle中利用关键字ro

这篇文章主要介绍了oracle中利用关键字rownum查询前20
Oracle截取JSON字符串内容的方法

Oracle截取JSON字符串

这篇文章主要介绍了Oracle截取JSON字符串内容 ,本文通
Oracle如何查看impdp正在执行的内容

Oracle如何查看impdp

这篇文章主要给大家介绍了关于Oracle如何查看impdp正
Linux虚拟机下安装Oracle 11G教程图文解说

Linux虚拟机下安装Ora

这篇文章主要介绍了Linux虚拟机下安装Oracle 11G教程