VALUES
语法。这种语法在某些其他数据库系统(如 MySQL、PostgreSQL)中是合法的,但不适用于 Oracle。
不支持:
INSERT INTO
[表名]([列名],[列名])
VALUES
([列值],[列值])),
([列值],[列值])),
([列值],[列值]));
但是,您可以使用以下几种方法来实现批量插入:
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;
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;
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;
INSERT ALL
语句时,确保每个 INTO
子句都合法且满足目标表的约束条件。FORALL
在 PL/SQL 中通常是最有效的方式,因为它可以减少与数据库之间的通信次数。根据你的具体需求和数据情况,选择合适的方法来执行批量插入操作。
参与评论
手机查看
返回顶部