-- 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_loader
DEFAULT DIRECTORY admin
ACCESS PARAMETERS
(
RECORDS DELIMITED BY newline
BADFILE 'ulcase1.bad'
DISCARDFILE 'ulcase1.dis'
LOGFILE 'ulcase1.log'
SKIP 20
FIELDS 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