首页 > 数据库 >Oracle临时表on commit preserve rows和on commit delete rows区别

Oracle临时表on commit preserve rows和on commit delete rows区别

时间:2024-07-03 17:42:25浏览次数:13  
标签:preserve rows 临时 SESSION 表中 Oracle commit

  Oracle 临时表:在 Oracle 中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。 Oracle 的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在 ORACLE 系统的临时表空间中( TEMP )。

1 、临时表的创建
创建Oracle 临时表,可以有两种类型的临时表:
会话级的临时表
事务级的临时表 。
1) 会话级的临时表

  这个临时表中的数据和你的当前会话有关系,当你当前SESSION 不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION 的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION 登陆的时候是看不到另外一个SESSION 中插入到临时表中的数据的。即两个不同的SESSION 所插入的数据是互不相干的。当某一个SESSION 退出之后临时表中的数据就被截断(truncate table ,即数据清空)了。会话级的临时表创建方法:

  Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Preserve Rows ;

举例:

create global temporary table Student (
Stu_id Number(5),
Class_id Number(5),
Stu_Name Varchar2(8),
Stu_Memo varchar2(200)) on Commit Preserve Rows ;

2) 事务级临时表

  是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION 的时候,事务级的临时表也会被自动截断)。事务级临时表的创建方法:

  Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Delete Rows ;

举例:
create global temporary table Classes (
Class_id Number(5),
Class_Name Varchar2(8),
Class_Memo varchar2(200)) on Commit delete Rows ;

3) 两中类型临时表的区别
会话级临时表采用 on commit preserve rows ;而事务级则采用 on commit delete rows ;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是 commit 、 rollback 或者是会话结束,临时表中的数据都将被截断
4 )什么时候使用临时表
1 )、当某一个 SQL 语句关联的表在 2 张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中
2 )、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。
2 .临时表的不足之处
1 )不支持 lob 对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。
2 )不支持主外键关系。
-----------------------------------
原文链接:https://blog.51cto.com/u_15077548/3713741

标签:preserve,rows,临时,SESSION,表中,Oracle,commit
From: https://www.cnblogs.com/leeno/p/18282270

相关文章

  • Qt QTableWidget resizeRowsToContents非常慢
    QTableWidget是Qt框架中的一个表格控件,用于显示和编辑表格数据。resizeRowsToContents是QTableWidget的一个函数,用于自动调整表格行的高度以适应内容。该函数在某些情况下可能会导致性能问题,特别是当表格中的行数较多或者表格中的内容较复杂时。这是因为该函数需要遍......
  • 百分浏览器Cent Browser v5.1.1130.129 正式版
    软件简介百分浏览器是基于Chrome内核开发的,因此在界面设计上与Chrome非常相似。它不仅继承了Chrome的稳定性和流畅性,还增加了一些Chrome没有的功能。例如,百分浏览器提供了更好的内存管理方法,可以减少内存占用,这对于经常使用大量标签页的用户来说是一个重要的优势。此外,它还......
  • browserless hooks 简单说明
    browserless提供了hooks能力,默认实现都为空,以下简单说明下内部处理默认实现如下图内部处理hooks.ts定义import{AfterResponse,BeforeRequest,BrowserHook,PageHook,}from'@browserless.io/browserless';import{EventEmitter......
  • playwright 连接browserless 服务
    playwright是与puppeteer类似的包装,但是playwright实现的周边更加丰富,也是一个很不错的工具,值得使用下,以下是关于playwright连接browserless服务的简单说明环境准备docker-composeversion:"3"services:nginx:image:nginx:alpinevolumes......
  • Java基础:throw和throws的详解
    总结来说,throw是用来抛出一个具体的异常实例,而throws是用来声明方法可能会抛出哪些类型的异常,是对调用者的一种通知和要求。1.throw作用:throw关键字用于在方法体内实际抛出一个异常实例。当程序运行到throw语句时,指定的异常会被创建并抛出,立即终止当前方法的执行,并将控制权......
  • 7、docker-commit镜像、将容器打包成一个镜像
    #dockercommit提交容器成为一个新的副本#dockercommit-m="提交的描述信息"-a="作者"容器id目标镜像名:[TAG]===========================================测试:1、启动tomcat·启动:dockerrun-it -p8080:8080tomcat//此命令进到容器后......
  • 如果你的同事还不会配置commit提交规范,请把这篇文章甩给他
    前言首先问问大家在日常工作中喜欢哪种commit提交?gitcommit-m"代码更新"gitcommit-m"解决公共样式问题"gitcommit-m"feat:新增微信自定义分享"如果你是第三种,那我觉得你肯定了解过commit提交规范,可能是刷到过同类文章也可能是在工作中受到的要求我自己是......
  • Auto Arena of LLMs: Automating LLM Evaluations with Agent Peer-battles and Commi
    1.引言大语言模型(LLMs)发展迅速,亟需可靠的评估方法。静态数据集存在污染风险,人工评估平台耗时费力。提出自动、可靠、可信的评估框架:Auto-ArenaofLLMs(Auto-Arena)。2.相关工作自动评估方法:静态数据集和基于模型的评估。人工评估平台:ChatbotArena,存在耗时和语言......
  • Android 11.0 mtk浏览器Browser下载应用不能安装问题的解决办法
    1.前言 在系统11.0的ROM定制化开发中,在开发mtk平台的时候,在系统默认浏览器Browser中发现在下载某些app的时候,结果显示的确实在下载到内部存储的时候,点击安装的时候安装失败,所以就需要从Browser的下载流程中出发分析相关源码来实现具体的功能2.mtk浏览器Browser下载应用不能......
  • cordova-plugin-inappbrowser内置浏览器插件
    一、InAppBrowser(内置浏览器)允许在在单独的窗口中加载网页。例如要向应用用户展示其他网页。当然可以很容易地在应用中加载网页内容并管理,但有时候需要不同的用户体验,InAppBrowser加载网页内容,应用用户可以更方便的直接返回到主应用。二、安装命令:cordovapluginaddcordov......