与MySQL单语句多行插入不同,Oracle数据库不支持这种直接方式。 但我们可以通过几种方法实现类似功能:
使用INSERT ALL语法 (Oracle 23c之前版本)
在Oracle 23c之前的版本中,可以使用INSERT ALL
语法进行多行插入。以下示例演示如何使用INSERT ALL
将数据插入TMP_DIM_EXCH_RT
表:
<code class="language-sql">INSERT ALL 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') SELECT 1 FROM DUAL;</code>
Oracle 23c 简化语法
Oracle 23c 引入了一种简化的多行插入语法:
<code class="language-sql">INSERT INTO t(col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3'), ('val2_1', 'val2_2', 'val2_3'), ('val3_1', 'val3_2', 'val3_3');</code>
此语法允许使用单个语句插入多行。
性能考量
对于大型数据集,Oracle 23c 的简化语法比INSERT ALL
方法更高效。为了优化性能,建议每次插入的行数不要超过1000行左右。
以上是Oracle中如何高效执行多行插入?的详细内容。更多信息请关注PHP中文网其他相关文章!