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

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

时间:2023-09-10 10:05:42浏览次数:41  
标签:tmp 教程 rows 临时 select tab SQL 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、各种临时数据储存,比如搜索记录、中转数据,操作日志等一些不重要仅需要临时使用的数据存储场景。



标签:tmp,教程,rows,临时,select,tab,SQL,DM8,达梦
From: https://blog.51cto.com/zhangxueliang/7423582

相关文章

  • 达梦数据库教程:DM8性能诊断(内存、CPU、磁盘、网络、AWR日志和接口日志诊断)
    性能诊断一、前言1.1概念性能诊断用于了解操作系统以及数据库的各项性能指标是否达到要求,以满足系统正常运行需要。通过性能诊断,可以更好地了解系统资源的使用情况、以及数据库的状态,提前避免由于性能不足引发的各种问题。性能诊断在数据库运维中具有极大的实用价值。性能诊断包括......
  • 达梦数据库教程:docker安装DM8数据库
    安装前准备软硬件版本终端X86-64架构Docker2023年6月版下载Docker安装包请在达梦数据库官网下载Docker安装包。导入安装包拷贝安装包到/opt目录下,执行以下命令导入安装包:dockerload-idm8_20230808_rev197096_x86_rh6_64_single.tar结果显示如下:导入完成后,可以使用doc......
  • 达梦数据库教程:DM8数据迁移工具使用教程(oracle迁移至DM8)
    DM数据迁移工具DM数据迁移工具DMDTS提供了主流大型数据库迁移到DM、DM到DM、文件迁移到DM以及DM迁移到文件等功能。得益于DM数据库对目前主流大型关系型数据库系统有着业界领先的兼容性,在存储层面、语法层面、接口层面和它们保持高度兼容,借助于DM图形界面且采用向......
  • SonarQube教程:idea配置及使用sonarlint插件扫描项目
    下载插件settings--plugins--marketplace中搜索sonarlint,安装后重启idea配置插件settings中搜索sonarlint配置远程sonarqube服务器地址,及相关鉴权信息使用插件在项目名称上或某个java文件中右击,选择AnalyzewithSonarlint或者在idea底部找到sonarlint,点击绿色开始按钮,即可开......
  • Flink 1.17教程:聚合算子(Aggregation)之按键分区(keyBy)
    聚合算子(Aggregation)计算的结果不仅依赖当前数据,还跟之前的数据有关,相当于要把所有数据聚在一起进行汇总合并——这就是所谓的“聚合”(Aggregation),类似于MapReduce中的reduce操作。按键分区(keyBy)对于Flink而言,DataStream是没有直接进行聚合的API的。因为我们对海量数据做聚合肯定要......
  • SonarQube教程:使用maven插件的方式扫描项目代码
    sonar扫描代码的三种途径配置Mavensettings.xml增加如下内容,注意pluginGroups和profiles都是settings下面的一级标签<pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups><profiles><profile><id>so......
  • Flink 1.17教程:输出算子之输出到MySQL(JDBC)
    输出到MySQL(JDBC)写入数据的MySQL的测试步骤如下。(1)添加依赖添加MySQL驱动:mysqlmysql-connector-java8.0.27官方还未提供flink-connector-jdbc的1.17.0的正式依赖,暂时从apachesnapshot仓库下载,pom文件中指定仓库路径:apache-snapshotsapachesnapshotshttps://repository.a......
  • 达梦数据库教程:DM8查询慢SQL
    setechooffsetfeedbackoffsettimingoffsetverifyoffsetlineshowoffSELECTSESS_ID,EXEC_TIME,FINISH_TIME,N_RUNS,TRX_ID,substr(sql_text,0,20)FROMV$SYSTEM_LONG_EXEC_SQL......
  • Flink 1.17教程:输出算子(Sink)之连接到外部系统
    输出算子(Sink)Flink作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持。连接到外部系统Flink的DataStreamAPI专门提供了向外部写入数据的方法:addSink。与addSource类似,addSink方法对应着一个“Sink”算子,主要就是用来实现与外部系统连接、并将数据提交写......
  • Flink 1.17教程:基本合流操作
    基本合流操作在实际应用中,我们经常会遇到来源不同的多条流,需要将它们的数据进行联合处理。所以Flink中合流的操作会更加普遍,对应的API也更加丰富。联合(Union)最简单的合流操作,就是直接将多条流合在一起,叫作流的“联合”(union)。联合操作要求必须流中的数据类型必须相同,合并之后的新流......