http://www.blogjava.net/decode360/archive/2008/10/16/286802.html

create or replace type person as object(
  name varchar2(10),
  sex varchar2(2),
  birthday date,
  age number(2)
);

两种创建对象表的方式

第一,
create table t(
  person_col person,
  emp_id number,
  dep_id number
);

第二,

create table t of person;

delete from t;
insert into t values('ww','f',sysdate-1,23);
insert into t values('ni','m',sysdate-2,24);
insert into t values('ss','f',sysdate-3,25);

insert into t values (
  person('张三','男',sysdate-1,23),
  100,
  10);

insert into t values (
  person('张四','女',sysdate-2,44),
  101,
  11);
 
insert into t values (
  person('wo','fe',sysdate-3,44),
  102,
  11);
insert into t values (
  person('ni','f',sysdate-4,45),
  103,
  12);
delete from t where emp_id=101;

在sqlplus中用下面语句可以看到内容
select * from t;

但在sqldeveloper中看不到person_col列的值,是如下的值

[KYC_ACC.PERSON]    102    11
[KYC_ACC.PERSON]    103    12

一定要用别名,否则引起岐义(schema名字)
select t1.person_col.age from t t1;

###################################

说明了schema object的依赖关系

create table test_table(col1 integer,col2 integer);

create or replace procedure test_proc
as
begin
  for x in (select col1,col2 from test_table)
  loop
    null;
  end loop;
end;
/

--反复查看这个过程的status列是否valid或invalid
select * from user_objects
where object_type='PROCEDURE';

--下面添加列没有依赖
alter table test_table add col3 number;

--但是修改列1时就有依赖关系了
alter table test_table modify col1 varchar2(20);

--这时要重新执行过程,才会变成valid
execute test_proc;

################################

创建普通表

create table employees (
  employee_id number(6),
  first_name  varchar2(20),
  last_name   varchar2(25)
    constraint emp_last_name_nn not null,
  email       varchar2(25)
    default 'aa@qq.com'
    constraint emp_email_nn not null,
  phone_number varchar2(20),
  hire_date date
    --defalut sysdate
    constraint emp_hire_date_nn not null,
  job_id varchar2(10)
    constraint emp_job_nn not null,
  salary number(8,2),
  commission_pct number(2,2),
  manager_id number(6),
  department_id number(4),
  constraint emp_salary_min check (salary>0),
  constraint emp_email_uk unique (email)
);

################################

创建外部表

1先授予权限

grant read,write on directory data_pump_dir to test

2

[oracle@oracle1 dpdump]$  cat student.data
10001@#$kerry@#$male@#$28@#$1
10002@#$jimmy@#$male@#$22@#$1
10003@#$ken@#$male@#$21@#$1
10004@#$merry@#$femal@#$20@#$1
10005@#$ll@#$male@#$30@#$1
this is a bad file

3然后将外部数据文件student.data放入/u01/app/oracle/admin/kyc/dpdump/这个data_pump_dir目录中

4创建外部表

CREATE TABLE EXTER_TEST
(
     ID              NUMBER(5)      ,
     NAME            VARCHAR(12)    ,
     SEX             VARCHAR(8)     ,
     AGE             NUMBER(3)      ,
     GRADE           NUMBER(1)
) ORGANIZATION EXTERNAL
(
            type        oracle_loader
            default directory data_pump_dir
            access parameters
            (
                    records delimited by newline
                    fields terminated by '@#$'
            )
            location ('student.data')
);

5查询
select * from exter_test;

出现下面错误,是因为student.data文件中有不符合规范的记录,可以删除“this is a bad file”这一条记录,但是这是为了测试下面情况,所以可以通过执行

alter table exter_test reject limit unlimited;跳过一些限制。

6如果源文件格式有误,会有日志写入log文件,并且bad文件中记录错误的行

[oracle@oracle1 dpdump]$ ll
total 24
-rw-r----- 1 oracle oinstall  116 Jan 26 15:16 dp.log
-rw-r----- 1 oracle oinstall   19 Apr 18 08:16 EXTER_TEST_27856.bad
-rw-r----- 1 oracle oinstall 3391 Apr 18 08:22 EXTER_TEST_27856.log
-rw-r----- 1 oracle oinstall   19 Apr 18 08:14 EXTER_TEST_27860.bad
-rw-r----- 1 oracle oinstall 1249 Apr 18 08:14 EXTER_TEST_27860.log
-rwxrwxrwx 1 oracle oinstall  146 Apr 18 08:22 student.data
[oracle@oracle1 dpdump]$ pwd
/u01/app/oracle/admin/kyc/dpdump

select * from all_external_locations;
select * from user_external_locations;
select * from dba_external_locations;

select * from user_external_tables;
select * from all_external_tables;
select * from dba_external_tables;

外部表限制:

1. 只能对表进行SELECT,不能进行DELETE、UPDATE、INSERT这些DML操作。
2. 因为外部表需要在ORACLE数据库“服务端”创建目录,OS文件必须放在这些目录中。即这些文件只能放在数据库服务端。如果数据文件不位于服务器,则无法使用外部表
3. 外部表上不能创建索引。但可以建立视图
4. 外部表不支持LOB对象。如果要使用LOB类型,则不能使用外部表。
eg:删除外部表的记录
delete from exter_test where id=10001;

################################

oracle-对象表-外部表的更多相关文章

  1. PG TO Oracle 增量同步-外部表

    背景 最近在负责公司数据Oracle转PG:老平台数据库:Oracle11g:新平台数据库:PostgreSQL12.由于平台统计规则有变动:所以正在推广的游戏数据无法全部迁移过来:只能在老平台上运行 ...

  2. 分区表,桶表,外部表,以及hive一些命令行小工具

    hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ...

  3. Hive内部表外部表转化分析(装)

    link:http://anyoneking.com/archives/127hive表分为内部表和外部表.外部表在删除的时候并不会删除到hdfs中的文件,比较安全,所以对于重要的需要进行分析的日志建 ...

  4. Hive基础(5)---内部表 外部表 临时表

    1.外部表 关键字:EXTERNAL 外部表创建时需要指定LOCATION 删除外部表时,数据不被删除 CREATE EXTERNAL TABLE page_view(viewTime INT, us ...

  5. hive内部表&外部表介绍

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table):区别:内部表数据由Hive自身管理,外部表数据由HDFS管理:内部表 ...

  6. Oracle外部表详解(转载)

    (外部表创建主要注意创建目录访问权限问题.目录路径格式无空格等不相关字符,即必须是当前表访问用户可以访问:关于表中行数的限制问题,如果不加限制注意添加reject limit unlimited:表中 ...

  7. Oracle 之 外部表

    一.外部表概述 外部表只能在Oracle 9i 之后来使用.简单地说,外部表,是指不存在于数据库中的表. 通过向Oracle 提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数 据库表 ...

  8. Oracle外部表详解

    外部表概述 外部表只能在Oracle 9i之后来使用.简单地说,外部表,是指不存在于数据库中的表.通过向Oracle提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数 ...

  9. 管理外部表(External Tables)

    Oracle数据库允许对外部表中的数据进行只读访问.外部表定义为不驻留在数据库中的表,并且可以是为其提供访问驱动程序的任何格式.通过为数据库提供描述外部表的元数据,数据库能够公开外部表中的数据,就好像 ...

随机推荐

  1. Calendar获取当前年份、月份、日期

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Te ...

  2. translclude

    .transclude:true 启用transclude,启用以后,有两个地方会发生变化: ①.使用指令的元素内部的所有内容都会被保存起来.不妨先把这一段内容称为一坨. 比如指令元素是这样的: &l ...

  3. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(二)

    [MyEclipse最新版下载] 二.创建一个Session EJB – Part 1 MyEclipse中的EJB 2.x开发使用了EJB向导和集成XDoclet支持的组合. 每个EJB由三个基本部 ...

  4. springboot 打包部署

    springboot内置有tomcat所以我们测试的时候没有加入自己的容器 那么我们的 springboot 怎么发布呢? 1.打成 jar 2.打成 war 这种方式我就不说了,网上有教程,我觉得j ...

  5. Unity最新版打包AssetBundle和加载的方法

    一.设置assetBundleName二.构建AssetBundle包三.上传AssetBundle到服务器四.把AssetBundle放到本地五.操作AssetBundle六.完整例子七.Asset ...

  6. Oracle非归档模式下脱机数据文件

    正常情况下,要想对数据文件脱机,必须在归档模式下,这是ORACLE自动保护的一种措施,防止在非归档模式下对数据文件脱机,造成数据丢失.如果想在非归档模式下执行数据文件脱机操作,则需要加上“for dr ...

  7. ksort 函数

    foreach ($modules AS $key => $value){ ksort($modules[$key]);}ksort($modules); strpos(','.$_SESSIO ...

  8. Unknown parameter datatype UNKNOW send from server.

    procedure Tmainform.Button7Click(Sender: TObject); begin kbmMWClientQuery3.Query.Text:='insert into ...

  9. FCC JS基础算法题(8):Slasher Flick(截断数组)

    题目描述: 返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始. 这个题目有两个方法,都比较简单,用slice方法: function slasher(arr, howMany) { // 请 ...

  10. sqlite的数据类型

    参考sqlite官方文档:https://www.sqlite.org/datatype3.html 绝大多数的SQL数据库采用静态的.严格的数据类型,数据库中的值由数据表的列类型定义决定. 然而,s ...