当前位置:  数据库>oracle

Oracle中的临时表、外部表和分区表

    来源: 互联网  发布时间:2017-06-14

    本文导语: 临时表 在Oracle中,临时表是“静态”的,它与普通的数据表一样只需要一次创建,其结构从创建到删除的整个期间都是有效的。相对于其他类型的表,临时表只有在用户实际向表中添加数据时,才会为其分配空间,并且分配的...

临时表

在Oracle中,临时表是“静态”的,它与普通的数据表一样只需要一次创建,其结构从创建到删除的整个期间都是有效的。相对于其他类型的表,临时表只有在用户实际向表中添加数据时,才会为其分配空间,并且分配的空间来自临时表空间。这就避免了与永久对象的数据争用存储空间。

创建临时表的语法如下:

CREATE GLOBAL TEMPORARY TABLE table_name( column_name data_type,[column_name data_type,...] )ON COMMIT DELETE|PRESERVE ROWS;

由于临时表存储的数据只在当前事务处理或者会话进行期间有效
因此,临时表分为事务级临时表和会话级临时表。

事务级临时表

创建事务级临时表,需要使用ON COMMIT DELETE ROWS子句,事务级临时表的记录在每次提交事务后被自动删除。

例1:

CREATE GLOBAL TEMPORARY TABLE tbl_user_transcation( ID NUMBER, uname VARCHAR2(10), usex VARCHAR2(2), ubirthday DATE ) ON COMMIT DELETE ROWS;
会话级临时表

创建会话级临时表,需要使用ON COMMIT PRESERVE ROWS子句,会话级临时表的记录在用户与服务器断开连接后被自动删除。

例2:

CREATE GLOBAL TEMPORARY TABLE tbl_user_session( ID NUMBER, uname VARCHAR2(10), usex VARCHAR2(2), ubirthday DATE ) ON COMMIT PRESERVE ROWS;
操作临时表

对事务级临时表插入一条数据但不COMMIT事务:

INSERT INTO tbl_user_transcation VALUES(1,'siege','M',TO_DATE('1991-02-28','YYYY-MM-DD')); SELECT * FROM tbl_user_transcation;

此时,查询结果如下:

1 siege M 28/02/1991

若进行了COMMIT,则此时表中无数据,说明Oracle已经将数据删除了。

对事务级临时表插入一条数据:

INSERT INTO tbl_user_session VALUES(1,'siege','M',TO_DATE('1991-02-28','YYYY-MM-DD')); SELECT * FROM tbl_user_session; COMMIT;

此时即使提交了事务,tbl_user_session 中仍有数据。
此时当关闭session后(断开数据库连接),再连接数据库,查询时则无数据了。

注:在PL/SQL Developer默认配置为打开一个窗口,即重新建立一个session,因此要注意设置共享session,

外部表

外部表是Oracle提供的、可读取操作系统的文件系统中存储的数据的一种只读表。外部表中的数据存储在操作系统的文件系统中,只能读,不能修改。

创建外部表

先以SYSDBA身份登录,授予用户相关权限:

 GRANT CREATE ANY DIRECTORY TO siege;

然后以用户身份登录创建目录:

 CREATE DIRECTORY external_student AS 'D:';

最后创建外部表:

例3:

CREATE TABLE tbl_external_student( sid NUMBER , sname VARCHAR2(10), sclass VARCHAR2(3), ssubject VARCHAR2(12), sscore NUMBER ) ORGANIZATION EXTERNAL ( TYPE oracle_loader DEFAULT DIRECTORY external_student ACCESS PARAMETERS(FIELDS TERMINATED BY ',') LOCATION ('student.csv') )

注:外部的D盘下的文件student.csv如下所示:

10001,siege,304,physics,80

查询tbl_external_student与上述显示一致。

分区表

在大型数据库应用中,需要处理的数据量甚至可以达到TB级。为了提高读写和查询速度,Oracle提供了一种分区技术,用户可以在创建表时应用分区技术,将数据以分区形式保存。

分区是指将表或索引分隔成相对较小的、可独立管理的部分。分区后的表与未分区的表在执行DML语句时没有任何区别。

对表进行分区,必须为表中的每一条记录指定所属分区。一条记录属于哪一个分区是由分区表对该记录的匹配字段决定的。分区字段可以是表中的一个字段或者多个字段的组合,在创建分区表时决定的。当用户对分区表进行插入、更新或者删除时,Oracle会自动根据分区字段的值来选择存储的分区。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,