Oracle中如何管理外部表

外部表是表结构被存放在数据字典,而表数据被存放在OS文件的表。通过使用外部表,不仅可以在数据库中查询OS文件的数据,还可以使用INSERT方式将OS文件数据装载到数据库中,从而实现SQL*Loader所提供的功能。建立外部表后,可以查询外部表的数据,在外部表上执行连接查询,或对外部表的数据进行排序。需要注意,外部表上不能执行DML修改,也不能在外部表上建立索引。

1、建立外部表

——准备工作:

[oracle@solaris10 ~]$mkdir /export/home/oracle/dat

[oracle@solaris10 ~]$cd /export/home/oracle/dat

[oracle@solaris10 dat]$vi empxt1.dat

360,Jane,Janus,ST_CLERK,121,17-MAY-2001,3000,0,50,jjanus

361,Mark,Jasper,SA_REP,145,17-MAY-2001,8000,.1,80,mjasper

362,Brenda,Starr,AD_ASST,200,17-MAY-2001,5500,0,10,bstarr

363,Alex,Alda,AC_MGR,145,17-MAY-2001,9000,.15,80,aalda

[oracle@solaris10 dat]$vi empxt2.dat

401,Jesse,Cromwell,HR_REP,203,17-MAY-2001,7000,0,40,jcromwel

402,Abby,Applegate,IT_PROG,103,17-MAY-2001,9000,.2,60,aapplega

403,Carol,Cousins,AD_VP,100,17-MAY-2001,27000,.3,90,ccousins

404,John,Richardson,AC_ACCOUNT,205,17-MAY-2001,5000,0,110,jrichard

——建立对应的目录:

SQL> conn /as sysdba

Connected.

SQL> create or replace directory admin_dat_dir

2  as '/export/home/oracle/dat';

Directory created.

SQL> create or replace directory admin_log_dir

2  as '/export/home/oracle/log';

Directory created.

SQL> create or replace directory admin_bad_dir

2  as '/export/home/oracle/bad';

Directory created.

SQL> !

[oracle@solaris10 ~]$mkdir /export/home/oracle/{log,bad}

[oracle@solaris10 ~]$ls

1               Documents       core            dat             local.login     shell

1.sql           afiedt.buf      cr_anny_db.sql  hell.txt        local.profile   x86

Desktop         bad             cr_dict.sql     local.cshrc     log

——授权scott 可以访问所建立的目录

SQL> grant read on directory admin_dat_dir to scott;

Grant succeeded.

SQL> grant write on directory admin_log_dir to scott;

Grant succeeded.

SQL> grant write on directory admin_bad_dir to scott;

Grant succeeded.

——建立外部表

SQL> conn scott/tiger

Connected.

SQL>

CREATE TABLE admin_ext_employees

(employee_id       NUMBER(4),

first_name        VARCHAR2(20),

last_name         VARCHAR2(25),

job_id            VARCHAR2(10),

manager_id        NUMBER(4),

hire_date         DATE,

salary            NUMBER(8,2),

commission_pct    NUMBER(2,2),

department_id     NUMBER(4),

email             VARCHAR2(25)

)

ORGANIZATION EXTERNAL

(

TYPE ORACLE_LOADER

DEFAULT DIRECTORY admin_dat_dir

ACCESS PARAMETERS

(

records delimited by newline

badfile admin_bad_dir:'empxt%a_%p.bad'

logfile admin_log_dir:'empxt%a_%p.log'

fields terminated by ','

missing field values are null

( employee_id, first_name, last_name, job_id, manager_id,

hire_date char date_format date mask "dd-mon-yyyy",

salary, commission_pct, department_id, email

)

)

LOCATION ('empxt1.dat', 'empxt2.dat')

)

PARALLEL

REJECT LIMIT UNLIMITED;

Table created.

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

DEPT                           TABLE

EMP                            TABLE

BONUS                          TABLE

SALGRADE                       TABLE

TEST                           TABLE

ADMIN_EXT_EMPLOYEES            TABLE

6 rows selected.

——查询外部表记录

SQL> select * from ADMIN_EXT_EMPLOYEES;

EMPLOYEE_ID FIRST_NAME LAST_NAME  JOB_ID     MANAGER_ID HIRE_DATE               SALARY COMMISSION_PCT DEPARTMENT_ID EMAIL

----------- ---------- ---------- ---------- ---------- ------------------- ---------- -------------- ------------- ----------

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2025-01-27 06:52:32

Oracle中如何管理外部表的相关文章

oracle中如何判断本表有多少张表对其有外键关联

在oracle中如何判断本表有多少张表对其有外键关联?我们主要分为两步: 第一步:        //查询表的主键约束名 select * from user_constraints e where e.table_name='' -----此处输入表名 第二步:        //查询所有引用到该主键的记录 select b.table_name,b.column_name from user_constraints a inner join user_cons_columns b on a.

oracle中drop后的表清楚表的含义

oracle中drop后的表清楚表的含义 drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除.  1.通过查询回收站user_recyclebin获取被删除的表信息,然后使用语句  flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop [rename to <new_table_

怎样把oracle中前缀相同的表查出多少张

问题描述 怎样把oracle中前缀相同的表查出多少张 问题描述:比如a_,b_,c_这些前缀开头数据表分别查询各有多少张. 解决方案 select count(*) from user_tables where table_name like 'a_%' 解决方案二: cyrwyy1314 已经回答了,我再补充一点oracle里面'_'好像是指匹配任意一个字符 解决方案三: select count(*) from user_tables where table_name like '%_%'

Oracle中本地管理表空间、字典管理表空间及ASSM特点

字典管理表空间-DMT     本地管理表空间-LMT 字典管理表空间(Dictionary-Managed Tablespace简称DMT),8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用. Oracle使用两个字典来记录Extents的使用情况:SYS.FET$记录空闲的Extents,SYS.UET$记录使用的Extents.在分配和释放分区时,都要修改者两个字典.属于DML操作,存在竞争,每个动作都是一个事务,会产生UNDO记录.需要周期性进行合并操作

Oracle中如何管理索引组织表

索引组织表(IOT)有一种类B树的存储组织方法.普通的堆组织表是以一种无序的集合存储.而IOT中的数据是按主键有序的存储在B树索引结构中.与一般B树索引不同的的是,在IOT中每个叶结点即有每行的主键列值,又有那些非主键列值. 在IOT所对应的B树结构中,每个索引项包括<主键列值,非主键列值>而不是ROWID,对于普通堆组织表,oracle会有对应的索引与之对应,且分开存储.换句话说,IOT即是索引,又是实际的数据. 索引组织表(IOT)不仅可以存储数据,还可以存储为表建立的索引.索引组织表的数

Oracle中使用临时表解决表冲突的例子

平台:windows 2000 server sp3 数据库:Oracle 9.0.1.1.1 现场描述:用户抱怨不能同时对多个单位进行数据处理,执行出现的错误信息为: SQL> exec sp_hyb_da_ryxx_dwbh_test('331028') BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END; *ERROR 位于第 1 行: ORA-02055: 分布式更新操作失效:要求回退 ORA-06502: PL/SQL: 数字或值错误 : 字符串

如何在Oracle中使用临时表解决表冲突

本文介绍一个Oracle里面使用临时表解决表冲突的例子,并附创建临时表的例子 平台:windows 2000 server sp3 数据库:Oracle 9.0.1.1.1 现场描述:用户抱怨不能同时对多个单位进行数据处理,执行出现的错误信息为: SQL> exec sp_hyb_da_ryxx_dwbh_test('331028') BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END; *ERROR 位于第 1 行: ORA-02055: 分布式更新操作

Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)

这时候以管理员身份进入sqlplus命令窗口. 在删除用户的时候有时候会出现以下问题: ORA-01940无法删除当前已连接用户 这时候的解决方案是: 1)查看用户的连接状况   select username,sid,serial# from v$session (2)找到要删除用户的sid,和serial,并删除 例如:你要删除用户'WUZHQ',可以这样做: alter system kill session'532,4562'; 这里的532表示的是sid,4562表示的是seria.

Oracle中利用存储过程建表

Oracle中存储过程不可以执行DDL语句,但是我们可以利用动态sql语句来建立表格. 如下:   代码 create or replace procedure spCreateTestTableis    v_CreateString varchar2(1000);begin    declare        v_count number;    begin        v_count := 0;                select count(*)        into v_c