在 Oracle 中,可以通过多种方式创建临时表(Temporary Table)。Oracle 的临时表有一个特点:数据是临时的,但表结构是永久的。根据数据的生命周期,临时表分为两种类型:
🔹 1. 创建临时表的语法
CREATE GLOBAL TEMPORARY TABLE 表名 (
列名 数据类型,
...
)
ON COMMIT [DELETE | PRESERVE] ROWS;
参数说明:
GLOBAL TEMPORARY
:表示这是一个全局临时表(Oracle 目前只支持全局临时表)。ON COMMIT DELETE ROWS
:每次事务提交时,数据会被自动清空。ON COMMIT PRESERVE ROWS
:事务提交后,数据仍然保留,直到会话结束。
🔹 2. 示例
✅ 每次事务提交清空数据
CREATE GLOBAL TEMPORARY TABLE temp_emp (
emp_id NUMBER,
emp_name VARCHAR2(50)
)
ON COMMIT DELETE ROWS;
✅ 会话结束时才清空数据
CREATE GLOBAL TEMPORARY TABLE temp_dept (
dept_id NUMBER,
dept_name VARCHAR2(50)
)
ON COMMIT PRESERVE ROWS;
🔹 3. 使用临时表示例
INSERT INTO temp_emp (emp_id, emp_name) VALUES (101, 'Tom');
COMMIT; -- 如果用了 ON COMMIT DELETE ROWS,这行数据会在这里被清空
SELECT * FROM temp_emp;
🔹 4. 注意事项
- 临时表的结构是永久的,只创建一次。
- 可以在临时表上创建索引,但索引也是临时的。
- 临时表的数据只对当前 session 可见,多个 session 互不干扰。
- 使用完毕后,无需手动清除数据,它会自动清理。
🔹 5. 删除临时表(如不再使用)
DROP TABLE temp_emp;
如果你需要在 PL/SQL 或存储过程里动态建表、插入临时数据,可以考虑临时表或使用 WITH
子句(CTE)/ 内存表结构(比如 Oracle 18c 以后的 PRIVATE TEMPORARY TABLES
)。如果你对这方面有兴趣,我也可以进一步介绍。
需要我给你加上 Oracle 18c 之后的 PRIVATE TEMPORARY TABLE
吗?
发表回复