我正在寻找一种很好的方法来向oracle9数据库中执行多行插入。以下代码在mysql中工作,但在oracle中似乎不受支持。
INSERT INTO TMP_DIM_EXCH_RT
(EXCH_WH_KEY,
EXCH_NAT_KEY,
EXCH_DATE, EXCH_RATE,
FROM_CURCY_CD,
TO_CURCY_CD,
EXCH_EFF_DATE,
EXCH_EFF_END_DATE,
EXCH_LAST_UPDATED_DATE)
VALUES
(1, 1, '28-AUG-2008', 109.49, 'USD', 'JPY', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(2, 1, '28-AUG-2008', .54, 'USD', 'GBP', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(3, 1, '28-AUG-2008', 1.05, 'USD', 'CAD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(4, 1, '28-AUG-2008', .68, 'USD', 'EUR', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(5, 1, '28-AUG-2008', 1.16, 'USD', 'AUD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(6, 1, '28-AUG-2008', 7.81, 'USD', 'HKD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008');
9条答案
按热度按时间kknvjkwl1#
这适用于oracle:
这里要记住的是使用
from dual
声明。jq6vz3qz2#
在oracle中,要在表t中插入多行(列为col1、col2和col3),可以使用以下语法:
rvpgvaaj3#
使用sql*加载器。这需要一点设置,但如果这不是一次性的,它是值得的。
创建表
创建csv
创建加载程序控制文件
运行sql*loader命令
确认插入
sqlloader有很多选项,几乎可以将任何文本文件作为输入。如果需要,甚至可以将数据内联到控制文件中。
下面是一个包含更多详细信息的页面->sqlloader
blpfk2vs4#
每当我需要这样做的时候,我就用如下的本地过程构建一个简单的pl/sql块:
pjngdqdw5#
如果已经有要插入到另一个表中的值,则可以从select语句插入。
否则,您可以列出一堆单行insert语句,并批量提交多个查询,以节省在oracle和mysql中都能工作的时间。
@espo的解决方案也是一个很好的解决方案,如果您的数据不在表中,它可以在oracle和mysql中工作。
pieyvz9o6#
如果要插入一些随机值,可以使用loop插入。
busg9geu7#
也可以使用游标,尽管它效率很低。下面的stackoverflow文章讨论了游标的用法:
在oracle中使用光标插入和更新记录
z9zf31ra8#
下面是在oracle中插入多行的一个非常有用的分步指导原则:
https://livesql.oracle.com/apex/livesql/file/content_bm1ljq87m5cniokpowpv6zgr3.html
最后一步:
cygmwpex9#
在我的例子中,我能够使用一个简单的insert语句将许多行批量插入到表\u a中,只使用表\u b中的一列,并从别处获取其他数据(序列和硬编码值):
结果:
等