在 Oracle 数据库中,不能直接使用类似于那种多行 VALUES 语法。
这种语法在某些其他数据库体系(如 MySQL、PostgreSQL)中是合法的,但不实用于 Oracle。
不支持:- INSERT INTO
- [表名]([列名],[列名])
- VALUES
- ([列值],[列值])),
- ([列值],[列值])),
- ([列值],[列值]));
复制代码 但是,您可以使用以下几种方法来实现批量插入:
在 Oracle 中进行批量插入(Bulk Insert)可以通过多种方式实现,下面介绍几种常见的方法:
1. 使用 INSERT INTO ... SELECT 语句
这种方法实用于从一个表复制数据到另一个表,大概从查询结果中插入数据。- INSERT INTO target_table (column1, column2, ...)
- SELECT column1, column2, ...
- FROM source_table
- WHERE condition;
复制代码
- 示例:
- INSERT INTO employees (id, name, salary)
- SELECT id, name, salary
- FROM temp_employees;
复制代码 2. 使用 INSERT ALL 语句
INSERT ALL 允许一次性指定多个插入操作,每个操作可以插入到同一表中的不同行。- INSERT ALL
- INTO target_table (column1, column2, ...) VALUES (value1, value2, ...)
- INTO target_table (column1, column2, ...) VALUES (value1, value2, ...)
- ...
- SELECT * FROM dual;
复制代码
- 示例:
- INSERT ALL
- INTO employees (id, name, salary) VALUES (1, 'Alice', 5000)
- INTO employees (id, name, salary) VALUES (2, 'Bob', 6000)
- INTO employees (id, name, salary) VALUES (3, 'Charlie', 5500)
- SELECT * FROM dual;
复制代码 3. 使用 FORALL PL/SQL 语句(实用于大量数据)
FORALL 是 PL/SQL 的语句,用于实行高效的批量绑定插入操作。它通常与数组团结使用,可以在一个事件中插入多行数据。
- 示例:
- DECLARE
- TYPE id_array IS TABLE OF employees.id%TYPE;
- TYPE name_array IS TABLE OF employees.name%TYPE;
- TYPE salary_array IS TABLE OF employees.salary%TYPE;
-
- ids id_array := id_array(1, 2, 3);
- names name_array := name_array('Alice', 'Bob', 'Charlie');
- salaries salary_array := salary_array(5000, 6000, 5500);
- BEGIN
- FORALL i IN 1..ids.COUNT
- INSERT INTO employees (id, name, salary)
- VALUES (ids(i), names(i), salaries(i));
- END;
复制代码 注意事项:
- 在 Oracle 中,批量插入可以显著提高性能,特殊是在处理大量数据时。选择符合的方法取决于你的具体需求和数据量。
- 使用 INSERT ALL 语句时,确保每个 INTO 子句都合法且满足目标表的约束条件。
- 对于大规模数据插入,FORALL 在 PL/SQL 中通常是最有效的方式,因为它可以减少与数据库之间的通讯次数。
根据你的具体需求和数据情况,选择符合的方法来实行批量插入操作。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |