外部表简单总结(r3笔记第51天)
对于外部表的使用而言,可能是既陌生又熟悉的感觉,说陌生可能自己真正的使用机会要少一些,而熟悉可能是大家比较常用的通过外部表来查看数据库日志,其实外部表还有更丰富的内容。 当然了外部表的使用都是基于目录来实现的。外部表调用的引擎有两个,一个oracle_datapump引擎,一个是oracle_loader引擎,在使用中和datapump,sql*loader都是有一定的关联的。 比如下面的例子。 我们需要导出emplyees中的数据,就可以使用如下的方式。基本是做数据的导出的情况比较多。导出文件为emp.data
create table hr.ext_emp organization external
(type oracle_datapump
default directory ext_dir
location('emp.data')
)as
select * from hr.employees;
在上面的基础上,如果我们想根据employees表的salary导出一个dump文件emp.data,下面的方式就很有优势。
create table hr.extp_emp organization external
(type oracle_datapump
default directory ext_dir
location('emp.dmp')
) as select * from hr.employees where salary>10000;
然后我们循序渐进,直接根据得到的dump文件emp.data来加载为一个全新的外部表。 比如我们需要一个全新的外部表,需要得到emp.data中的数据。可以使用如下的方式。
create table hr.extp2_emp(employee_id number(6),first_name varchar2(20)) organization external
(type oracle_datapump
default directory ext_dir
location('emp.dmp')
) ;
这样就可以直接从外部表extp2_emp中直接访问dump emp.data中的数据了。 以上是使用oracle_datapump的一些常用实例。 对于oracle_loader来说,效果相比sql*loader也毫不逊色。数据的加载上也很灵活。 如果我们想得到10g数据库版本中的数据库日志信息,可以参考下面的方式。 首先得到数据库日志的路径,然后创建对应的目录结构。然后直接把数据库日志文件以行的形式加载,生成一个只读的表。日志中的每一行在数据库中都是一行记录。
create directory alert_dir as '/u01/app/oracle/admin/PODD/bdump';
grant read,write on directory alert_dir to hr;
create table hr.alert_log(text varchar2(1000)) organization external
(type oracle_loader
default directory alert_dir
location('alert_PODD.log')
);
如果在实际的应用中可能有更为复杂的情况。 比如我们需要一个只读表emp_load,来读取info.dat中的数据,可能对于数据类型的转换而言。需要做一些额外的转换工作,oracle_loader就是一个不错的选择。 我们要加载Info.dat的数据,要转换的数据类型等就可以类似下面的例子。
CREATE TABLE hr.emp_load
(employee_number CHAR(5),
employee_dob CHAR(20),
employee_last_name CHAR(20),
employee_first_name CHAR(15),
employee_middle_name CHAR(15),
employee_hire_date DATE)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY ext_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
FIELDS (employee_number CHAR(2),
employee_dob CHAR(20),
employee_last_name CHAR(18),
employee_first_name CHAR(11),
employee_middle_name CHAR(11),
employee_hire_date CHAR(10) date_format DATE mask "mm/dd/yyyy"
)
)
LOCATION ('info.dat')
);
- python接口自动化9-https请求(SSL)
- Windows环境下php开启GD库的方法
- python接口自动化10-token登录
- HDU 1000 A + B Problem(指针版)
- Java 10 已发布!时隔 6 月带来 109 项新特性
- STL中的nth_element()方法的使用
- C++queue容器学习(详解)
- 牛客面经 |这可能不只是一篇面经
- 图的基本算法(BFS和DFS)
- C++STL中set的使用策略(详解)
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)(A.思维题,B.思维题)
- 设计模式六大原则(1):单一职责原则
- 设计模式六大原则(2):里氏替换原则
- Selenium2+python自动化72-logging日志使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实现随机森林
- 在mysql中order by是怎样工作的?
- 多线程应用 - 阻塞队列ArrayBlockingQueue详解
- Java虚拟机 - 超级详细的类加载说明
- ReentrantLock
- 多线程应用 - 阻塞队列LinkedBlockingDeque详解
- AtomicInteger详解
- 多线程应用 - 阻塞队列LinkedBlockingQueue详解
- 多线程应用 - 超详细的AQS详情
- 多线程应用 - 基于AQS的Condition
- HashMap源码分析 - jdk8
- HashMap源码分析 - JDK7和JDK8有什么区别
- 线程应用 - 中断interrupt详解
- ThreadLocal全面解析
- tomcat类加载机制了解一下