oracle临时表
临时表分类:
-
会话级临时表(session表)
-
事务级临时表
会话级临时表(session表)
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据
- 创建方式
Create Global Temporary table Table_Name
(
id_ int
)
On Commit Preserve Rows;
或者从另外一个表创建:
create global temporary table Table_Name on commit rpeserve rows as
select id from Table_Name1;
测试:
insert into Table_Name(id_) values(12);
当前会话窗口查询:
另起一个窗口查询:
从当前会话窗口插入数据能查询到,另起一个会话创建查询不到数据,退出当前会话自动清空数据(表结构保留)
删除临时表需要注意的是有时候会出现ORA-14452,意思是有资源还在占用临时表,无法删除。需要找到临时表的会话,手动杀掉
- 具体操作:
-- 查找还在使用临时表的会话
SELECT sid, serial#
FROM v$session
WHERE sid = (SELECT sid FROM v$lock
WHERE id1 = (SELECT object_id FROM dba_objects
WHERE object_name = UPPER('临时表名')));
-- 使用上面查出的sid和serial#,杀掉会话
ALTER system kill session 'sid,serial#';
事物级临时表
事务级临时表是指临时表中的数据只在事务生命周期中存在。
- 创建方式
create global temporary table Table_Name
(
id_ int
)
on Commit Delete Rows;
测试
insert into Table_Name(id_) values(123)
select * from Table_Name
不提交事物:
执行commit后再次查询:
当你执行commit或rollback操作,再次查询表内的数据就查询不到了(表结构保留)
Mysql临时表
mysql临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。和oracle会话级别临时表有些类似,不同的是表只对当前会话有效,即其他会话查询不像oracle查询不到数据,而是直接报表不存在,而且当前会话结束不会保留表结构,会直接drop掉表
创建方式:
create temporary table tmp_table(
id_ int
);
来源:CSDN
作者:weihubeats
链接:https://blog.csdn.net/qq_42651904/article/details/103677955