Oracle 表

本文介绍了Oracle数据库中的四种表类型:堆表,以其不确定的存储顺序为特点;索引组织表,通过索引提高查询速度但牺牲插入速度;对象表,结合了面向对象特性的表类型,性能相对较弱;以及临时表和外部表,分别用于临时数据存储和通过SQL访问文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值