达梦数据库教程:DM8临时表的使用

一、什么是临时表

临时表就是用来暂时保存临时数据(亦或叫中间数据) 的一个数据库对象, 它和普通表有些类似, 然而又有很大区别。 它只能存储在临时表空间, 而非用户的表空间。 临时表是会话或事务级别的, 只对当前会话或事务可见。 每个会话只能查看和修改自己的数据。

临时表的分类:

  • 事务级 (On Commit Delete Rows)
    数据在 Transaction 期间有效一旦COMMIT后,rollback,断开连接,数据就被自动 TRUNCATE

  • session级 (On Commit Preserve Rows)
    数据在 Session 期间有效一旦关闭了Session 或 Log Off 后,数据就被自动 TRUNCATE

二、创建临时表

1.事务级临时表

事务级临时表:
手动建立:

SQL> create global temporary table t_tmp_tab (id number,name varchar2(20)) on commit delete rows;

Table created.

SQL> desc t_tmp_tab
Name Null  Type
----------------------------------------------------- -------- ------------------------------------
ID NUMBER
NAME VARCHAR2(20)

SQL> insert into t_tmp_tab select empno,ename from emp where deptno=10;

3 rows created.

SQL> select * from t_tmp_tab;

ID NAME
---------- --------------------
7782 CLARK
7839 KING
7934 MILLER

SQL> commit;

Commit complete.

#事务提交后,再次查询,数据已经被清空
SQL> select * from t_tmp_tab;

no rows selected

SQL>
 

2.会话级临时表

SQL> create global temporary table s_tab_tmp (id number,name varchar2(20)) on commit preserve rows;

Table created.

SQL> insert into s_tab_tmp select empno,ename from emp where deptno=10;

3 rows created.

SQL> commit;

Commit complete.

SQL> select * from s_tab_tmp;

ID NAME
---------- --------------------
7782 CLARK
7839 KING
7934 MILLER

SQL> exit


#重新登录
#断开会话,重新连接后,数据被清空
SQL> select * from s_tab_tmp;

no rows selected

SQL>

 

三、应用场景

临时表具有多用户操作的独立性和数据的临时性等特点,可以保证多个用户在对同一张临时表操作进行交叉操作时,多个用户操作的并发性和独立性。
临时表的使用常见非常多以下列举几个场景:
1、in操作,in中可以传递的变量是有上限的,太多的in值可能造成SQL报错,同时给sql的执行带来灾难性的影响,如果把in值插入到一张事务临时表中,通过子查询将值传递到in 中,是一种比较理想的解决方案。
2、大表关联的优化,多个非常大的表关联的情况下, 但是需要检索的是少量的数据的时候.可以先把大表的数据进行过滤, 将结果级插入到临时表中, 通过临时表进行关联。
3、各种临时数据储存,比如搜索记录、中转数据,操作日志等一些不重要仅需要临时使用的数据存储场景。


links:

https://eco.dameng.com/community/post/20221229110956A7LTMRL5RTQ6QQNH2D

猜你喜欢

转载自blog.csdn.net/a772304419/article/details/132760165