oracle 多表插入

2023年 8月 2日 58.4k 0

Oracle中多表插入是一个比较常见的需求。它的意思是对多个表进行插入操作,可以一次性地进行多个插入动作。这样一来,可以减少很多重复性代码的编写,提高代码的复用性。

例如,假设我们现在需要往两个表中插入数据。第一个表是员工表,第二个表是部门表。

CREATE TABLE employee(
id NUMBER(6) NOT NULL,
name VARCHAR2(20) NOT NULL,
SEX VARCHAR2(20) NOT NULL,
age NUMBER(6) NOT NULL,
salary NUMBER(10, 2) NOT NULL,
hiredate DATE NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE department(
id NUMBER(6) NOT NULL,
deptname VARCHAR2(20) NOT NULL,
location VARCHAR2(20) NOT NULL,
PRIMARY KEY(id)
);
INSERT INTO employee(id, name, sex, age, salary, hiredate)
VALUES(1, '张三', '男', 35, 8000, TO_DATE('2018-12-01', 'yyyy-mm-dd'));
INSERT INTO employee(id, name, sex, age, salary, hiredate)
VALUES(2, '李四', '女', 28, 5000, TO_DATE('2019-01-01', 'yyyy-mm-dd'));
INSERT INTO department(id, deptname, location)
VALUES(1, '研发部', '北京');
INSERT INTO department(id, deptname, location)
VALUES(2, '销售部', '上海');

这样我们就已经在两个表中插入了数据。但是如果我们需要在一个事务中往这两个表中插入数据,而且还要保证数据的一致性,这时候就需要使用多表插入。

Oracle中的多表插入语法如下:

INSERT ALL
WHEN 1=1 THEN
INTO employee(id, name, sex, age, salary, hiredate)
VALUES(3, '王五', '男', 25, 6000, TO_DATE('2019-02-01', 'yyyy-mm-dd'))
WHEN 1=1 THEN
INTO department(id, deptname, location)
VALUES(3, '人力资源部', '广州')
SELECT * FROM DUAL;

这个语法可以对多个表进行插入操作,每个插入操作都需要一个WHEN条件,如果满足这个条件,则插入相应的表。注意,这里的WHEN条件不能省略,可以使用1=1这样的条件来代替。

在实际使用中,如果需要往多个表中插入很多数据,可以采用类似下面的方式:

INSERT ALL
WHEN 1=1 THEN
INTO employee(id, name, sex, age, salary, hiredate)
VALUES(4, '赵六', '男', 30, 10000, TO_DATE('2020-01-01', 'yyyy-mm-dd'))
WHEN 1=1 THEN
INTO department(id, deptname, location)
VALUES(4, '财务部', '深圳')
SELECT * FROM DUAL
UNION ALL
SELECT * FROM (
SELECT 5 AS id, '钱七' AS name, '女' AS sex, 27 AS age, 7000 AS salary, TO_DATE('2020-02-01', 'yyyy-mm-dd') AS hiredate, '网络部' AS deptname, '武汉' AS location FROM DUAL
)

这样就可以往员工表和部门表中插入两条记录了。注意这里使用了UNION ALL语法,用于将两个SELECT语句的结果集合并起来。这个方法可以用来同时插入大量数据到多个表中。

总之,Oracle中的多表插入可以让我们在一个事务中进行多个插入操作,从而提高代码的复用性和执行效率,适用于数据量较大的情况。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论