滴水恩情 发表于 2024-9-25 07:47:32

Oracle的insert的批量插入语句

在 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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Oracle的insert的批量插入语句