Oracle学习笔记(二)——临时表
在针对大数据量的多表级联查询或复杂事务处理的时候,引入Oracle临时表是一种不错的策略。因此,在解决实际需求时经常会遇到需要使用存储过程和临时表相互配合的情况。下面就Oracle如何创建临时表以及注意事项做出总结:
一、创建临时表
Oracle临时表分为回话期和事务期两种类型,他们的创建语法基本一致:
- 会话期临时表
CREATE GLOBAL TEMPORARY TABLE ON COMMIT PRESERVE ROWS;
- 事务期临时表
CREATE GLOBAL TEMPORARY TABLE ON COMMIT DELETE ROWS;
二、会话期临时表与事务期临时表的区别
在与事务相关的临时表中,数据只存在于事务期间。而在与会话相关的临时表中,数据只存在于会话期间。临时表中的数据为一个会话所私有。每个会话只能查询与修改属于此会话的数据。对临时表数据进行 DML 操作时无需加锁(Lock)。LOCK 语句对临时表无效,因为每个会话只能操作其私有数据。
针对与会话相关的临时表(session-specific temporary table)执行的 TRUNCATE 语句只会清除(truncate)属于此会话的数据,而不会清除此临时表中属于其他会话的数据。
用户可以使用 CREATE INDEX 语句为临时表(temporary table)创建索引。创建在临时表上的索引也是临时的,索引数据的生存周期与临时表内数据的生存周期相同。
*用户可以创建同时访问永久表(permanent table)与临时表(temporary table)的视图。用户还可以在临时表上创建触发器(trigger)。
临时表(temporary table)使用临时段(temporary segment)存储数据。与永久表(permanent table)不同,Oracle 在创建临时表及临时索引时并不会为其分配段(segment),段是在第一次执行 INSERT(或CREATE TABLE AS SELECT)语句时进行分配。在发生首次 INSERT 之前执行的 SELECT,UPDATE,或 DELETE 语句操作的是一个空表。
当没有会话(session)与临时表(temporary table)绑定(bound)的时候,用户才能够对其执行 DDL 操作(ALTER TABLE,DROP TABLE,CREATE INDEX 等)。对临时表执行 INSERT 语句时,会话将和此临时表绑定。在会话结束时对临时表执行的 TRUNCATE 语句将解除(unbound)会话与此临时表的绑定。对于与事务相关的(transaction-specific)临时表,执行 COMMIT 或 ROLLBACK 将解除会话与此临时表的绑定。
三、我们在什么时候应该选择临时表
临时表最常见的使用场合是在存储过程中。例如保存一些复杂检索的结果以提供给之后使用,从而可以避免反复查询。另一种可能的使用场合是在进行某些大数量的多表查询时,一些查询的结果集数据量较少。我们可以先将这部分数据保存在临时表中,从而降低多表查询的级联数量提高检索速度。这时更适合选择会话级临时表。
临时表本身并不难使用,但是我们时常会在生产中忘记它的存在。就我个人经验来说,在某些特定的需求中,使用临时表确实能够降低查询的复杂度和提高查询速度。
Oracle学习笔记(二)——临时表的更多相关文章
- Oracle 学习笔记(二)
一.索引 表的数据是无序的,所以叫堆表(heap table),意思为随机存储数据.因为数据是随机存储的,所以在查询的时候需要全表扫描.索引就是将无序的数据有序化,这样就可以在查询数据的时候 减少数据 ...
- Oracle学习笔记二 初识Oracle(二)
Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...
- Oracle 学习笔记二
一.oracle通用函数vnl(a,b) 用于任何类型,如果a的值不为null返回a的值否则返回b的值 条件判断oracle中可以使用 case 字段 when 条件1 then 表达式1 when ...
- oracle学习笔记(二)
1. Oracle字符串操作 1.1. 字符串类型 1.1.1. CHAR和VARCHAR2类型 CHAR和VARCHAR2类型都是用来表示字符串数据类型,用来在表中存放字符串信息, 比如姓名.职业. ...
- Oracle学习笔记二
多表查询: 笛卡尔积: 实际上是两张表的乘积,但是在实际开发中没有太大意义 格式: select * from 表1,表2 select * from emp; select * from dept; ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
随机推荐
- VS中出现“链接器工具错误,XXX工具模块对于SAFESEH映像是不安全的”的解决方法
1.“调试”菜单->“属性”->“配置属性”->“链接器”->“命令行” 2.在“其它选项”的输入框里输入 /SAFESEH:NO ,点击“应用”
- 03: shell简单监控脚本
1.1 监控apache web server #! /bin/bash # apache netstat -anpt | grep 80 &> /dev/null if [ $? -e ...
- 编译安装vsftpd-3.0.2
编译安装vsftpd 首先下载源码包(我一般喜欢放在/home/test) 解压:tar -zxvf vsftpd-3.0.2.tar.gz 进入目录进行编译 cd vsftpd-3.0.2 编译之前 ...
- 20145106 java 实验四
这次的实验是Android开发实验基础.Android开发是一个很大的工程,但是这次只是一个小小的入门. 首先将SDK文件复制到-根目录下,之后将Android Studio复制到电脑里. 并指明SD ...
- 20145206邹京儒《网络对抗技术》 PC平台逆向破解
20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...
- 20145327《网络对抗》——注入shellcode并执行和Return-to-libc攻击深入
20145327<网络对抗>--注入shellcode并执行 准备一段Shellcode 老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68 ...
- Android 手机小闹钟
Android 手机小闹钟 一.这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作关闭 ...
- 20145319 《网络渗透》DNS欺骗
20145319 <网络渗透>DNS欺骗 实验内容 dns欺骗实质上就是一种通过修改dns文件来改变目标想访问的域名和对应ip的攻击,使得目标在访问自己常用域名时不知不觉落入我们的圈套(可 ...
- 2018-2019-1 1723《程序设计与数据结构》第3&4周作业 总结
作业要求 第三周作业: 提交情况如图: 第四周作业: 提交情况如图: 作业问题 1.问题总结方面希望大家的解决过程不要完全复制百度出来的或者其他博客的内容.因为很明显,没有自己的思考过程.可以先把参考 ...
- ubuntu16.04下内核模块解析
一.环境如下: 1.1内核版本: jello@jello:~$ uname -a Linux jello 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19: ...