Oracle 表

来源:互联网 发布:mysql主从复制的原理 编辑:程序博客网 时间:2024/06/06 12:25

-- Start

堆表(heap-organized)

堆表是默认的类型,存储的顺序是不确定的.

索引组织表(index-organized)

索引组织表是指按照索引的方式存储表,这样做的好处是查询速度快,坏处是当我们向表中插入数据时,Oracle 为了维护索引需要移动数据,这会大大降低插入速度。下面是一个简单的例子。

CREATE TABLE test(  id    NUMBER(10),  name  VARCHAR2(30),  CONSTRAINT pk_test PRIMARY KEY (id)) ORGANIZATION INDEX;

对象表(object)

我们都知道,传统数据库都是关系型数据库,随着 Java 和面向对象的流行,Oracle 也与时俱进,加入了面向对象的特性。对象表就是一个典型的例子,面向对象使查询变得复杂,同时它的性能也不如传统表好,没有充足的理由,不建议使用它,千万不要为了炫耀技术而使用它。下面是一个简单的例子。

-- 创建类型CREATE TYPE address_type AS OBJECT(hno    NUMBER,street VARCHAR2(40),city   VARCHAR2(20),zip    VARCHAR2(5),phone  VARCHAR2(10));CREATE OR REPLACE TYPE person_type AS OBJECT(    name          VARCHAR2(30),    birthday      DATE,    homeaddress   address_type -- 注意此处);-- 创建表CREATE TABLE student OF person_type;-- 插入数据INSERT INTO student VALUES ('ZhangSan', date '1990-09-09', address_type(1,'Hui Xie', 'Da Lian', '116024', 88889999));-- 查询select * from student-- OBJECT_ID 是个伪列,返回对象 ID-- OBJECT_VALUE 是个伪列,返回对象值select OBJECT_ID,OBJECT_VALUE from student;

临时表(temporary)

Oracle 支持两种级别的临时表,一种是 transaction 级别,事务提交后自动清除。另一种是 session 级别,会话关闭后自动清除。下面是一个简单的例子。

-- transaction 级别CREATE GLOBAL TEMPORARY TABLE test(col char(1)) ON COMMIT DELETE ROWS;-- session 级别CREATE GLOBAL TEMPORARY TABLE test(col char(1)) ON COMMIT PRESERVE ROWS;

外部表(external)

如果你想通过 SQL 访问一个文件,外部表可以帮我们实现这样的功能,创建外部表的时候,我们需要指定要导入的文件和如何导入这个文件,下面是一个简单的例子。

CREATE TABLE dept_external(deptno NUMBER(6),dname  VARCHAR2(20),loc    VARCHAR2(25)) ORGANIZATION EXTERNAL(TYPE oracle_loaderDEFAULT DIRECTORY adminACCESS PARAMETERS(RECORDS DELIMITED BY newlineBADFILE 'ulcase1.bad'DISCARDFILE 'ulcase1.dis'LOGFILE 'ulcase1.log'SKIP 20FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'(deptno INTEGER EXTERNAL(6),dname  CHAR(20),loc    CHAR(25)))LOCATION ('ulcase1.csv')) REJECT LIMIT UNLIMITED;

-- 更多参见:Oracle SQL 精萃

-- 声明:转载请注明出处

-- Last edited on 2015-09-11

-- Created by ShangBo on 2015-09-11

-- End


0 0
原创粉丝点击