--临时表
--概念
临时表是用来暂时保存临时数据(或叫中间数据)的一个数据库对象,它和普通表类似,然而又有很大区别。
它只能存储在临时表空间,而非用户表空间。oracle临时表是会话或事务级别的,只对当前会话或事务可
见。每个会话只能查看和修改自己的数据。
--应用
oracle数据库的临时表可以用来保存一个会话SESSION的数据,或者一个事务中的数据。当查询语句非
常复杂时,我们就可以创建一个临时表保存查询结果,并进行一系列的操作。
--分类
--会话级临时表
是指临时表中的数据只在当前会话生命周期中存在,当用户退出会话结束时,oracle自动清除临时表
中当前会话的数据。执行COMMIT或ROLLBACK操作,表内数据依然存在,新建一个命令窗口(相当
于开启了一个新的会话),表内的数据就查询不到了
--事务级临时表
是指临时表中的数据只在事务生命周期中存在,当一个事务结束(COMMIT/ROLLBACK)时,oracle
自动清除临时表中的数据,继承了会话级临时表特点。
--注意事项
1)不建议LOB对象放入临时表
2)不支持主外键关系
3)临时表不能永久保存数据
4)临时表的数据不会备份、恢复,对其的修改也不会有任何日志信息
5)临时表不会有DML锁
6)临时表可以创建临时的索引、视图、触发器
7)如果要DROP会话级临时表,并且表中包含数据时,必须先删除其中的数据,否则会报错。
-------------------------------------------------------------------------------
--会话级临时表(ON COMMIT PRESERVE ROW; 当COMMIT时保留数据)
--创建语法
CREATE GLOBAL TEMPORARY TABLE TMP_TBL_NAME(
COLUMN1 TYPE1,
COLUMN2 TYPE2
...
) ON COMMIT PRESERVE ROWS;
--示例1,创建会话临时表
CREATE GLOBAL TEMPORARY TABLE TMP_TBL_SESSION1(
SID VARCHAR(30),
SNAME VARCHAR(30)
)
ON COMMIT PRESERVE ROWS; --会话临时表
INSERT INTO TMP_TBL_SESSION1 VALUES('001','刘晓');
INSERT INTO TMP_TBL_SESSION1 VALUES('002','王八');
COMMIT;
SELECT * FROM TMP_TBL_SESSION1;
--事务级临时表(ON COMMIT DELETE ROWS; 当COMMIT时删除数据,创建时不加关键字,默认的是事务临时表)
--创建语法
CREATE GLOBAL TEMPORARY TABLE TMP_TBL2_TRANSACTION(
COLUMN1 TYPE1,
COLUMN2 TYPE2,
...
)
ON COMMIT DELETE ROWS; --事务临时表(可以不省略不写)
--示例1,创建事务临时表
CREATE GLOBAL TEMPORARY TABLE TMP_TBL2_TRANSACTION(
SID VARCHAR(30),
SNAME VARCHAR(30)
)
ON COMMIT DELETE ROWS;
INSERT INTO TMP_TBL2_TRANSACTION VALUES('001','刘晓');
INSERT INTO TMP_TBL2_TRANSACTION VALUES('002','王八');
SELECT * FROM TMP_TBL2_TRANSACTION;
ORACLE(DDL)---临时表
最新推荐文章于 2023-06-08 14:03:11 发布