ORACLE(DDL)---临时表

--临时表
	--概念
		临时表是用来暂时保存临时数据(或叫中间数据)的一个数据库对象,它和普通表类似,然而又有很大区别。
		它只能存储在临时表空间,而非用户表空间。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,oracle,数据库)