本文共 1923 字,大约阅读时间需要 6 分钟。
-- Start
堆表是默认的类型,存储的顺序是不确定的.
索引组织表是指按照索引的方式存储表,这样做的好处是查询速度快,坏处是当我们向表中插入数据时,Oracle 为了维护索引需要移动数据,这会大大降低插入速度。下面是一个简单的例子。
CREATE TABLE test( id NUMBER(10), name VARCHAR2(30), CONSTRAINT pk_test PRIMARY KEY (id)) ORGANIZATION INDEX;
我们都知道,传统数据库都是关系型数据库,随着 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;
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;
如果你想通过 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;
-- 更多参见:
-- 声明:转载请注明出处
-- Last edited on 2015-09-11
-- Created by ShangBo on 2015-09-11
-- End