Oracle 原理:数据装载 ,SQLldr ,外部表
一、导入 SQLldr
SQL*LOADER可以把txt文件,Excel文件导入到数据库中。使用SQLloader导入导出需要一个数据文件和一个控制文件。数据文件中存了你需要导入的数据,控制文件中写你需要怎么导入这些数据。
LOAD DATA
infile 'e:\aa.csv' ## 源文件路径,路径不要包括中文
into table xx_temp <impcmd> ## 要导入的表
(id terminated by whitespace ## id 为列名,whitespace 表示列之间使用空格来区分,如果是其他的 ‘|’ 方式则使用 terminated by '|' 逗号则用逗号.以此类推
)
## 换行 也是自动终止字段读的标识
其中 impcmd 中 可以被4个值替换分别是insert (缺省默认值),append,replace,truncate
insert: 插入数据,要求表为空
append:追加数据,在原来表的基础上再插入数据
replace :删除原表数据,再插入
truncate:删除原表数据,再插入,比replace 更高效
例如有这么张表
create table salary_tbl(employer_nm varchar(20) ,department varchar(20) not null,salary number not null,leader_nm varchar(20)
)
新建一个.txt文件用于存数据,可以自定义分隔符来区分字段
新建一个ctl 以字符 ' |' 分割
或者这样写更简便
load data
infile 'data1.txt'
into table SALARY_TBL append
fields terminated by '|'(employer_nm ,department ,salary ,leader_nm
)
在cmd执行 cd 到对应目录执行 ,执行完后可以查看对应位置log的内容
sqlldr userid=system/voapd@orcl control=control1.ctl log=11.log
在cmd 执行 sqlldr 可以查看sqlldr 的帮助
userid | ORACLE用户名/口令 |
control | 控制文件名 |
log | 日志文件名 |
bad | 错误文件名 |
data | 数据文件名 |
discard | 废弃文件名 |
discardmax | 允许废弃的文件的数目(全部默认) |
skip | 要跳过的逻辑记录的数目(默认0) |
load | 要加载的逻辑记录的数目(全部默认) |
errors | 允许的错误的数目(默认50) |
rows | 常规路径绑定数组中或直接路径保存数据间的行数(默认:常规路径64,所有直接路径) |
bindsize | 常规路径绑定数组的大小(以字节计)(默认256000) |
silent | 运行过程中隐藏消息(标题,反馈,错误,废弃,分区) |
direct | 使用直接路径(默认FALSE) |
parfile | 参数文件:包含参数说明的文件的名称 |
parallel | 执行并行加载(默认FALSE) |
file | 要从以下对象中分配区的文件 |
skip_unusable_indexes | 不允许/允许使用无用的索引或索引分区(默认FALSE) |
skip_index_maintenance | 没有维护索引,将受到影响的索引标记为无用(默认FALSE) |
commit_discontinued | 提交加载中断时已加载的行(默认FALSE) |
readsize | 读取缓冲区的大小(默认1048576) |
external_table | 使用外部表进行加载;NOT_USED,GENERATE_ONLY,EXECUTE(默认NOT_USED) |
columnarrayrows | 直接路径列数组的行数(默认5000) |
streamsize | 直接路径流缓冲区的大小(以字节计)(默认256000) |
multithreading | 在直接路径中使用多线程 |
resumable | 启用或禁用当前的可恢复会话(默认FALSE) |
resumable_name | 有助于标识可恢复语句的文本字符串 |
resumable_timeout | RESUMABLE的等待时间(以秒计)(默认7200) |
date_cache | 日期转换高速缓存的大小(以条目计)(默认1000) |
no_index_errors | 出现任何索引错误时中止加载(默认FALSE) |
PLEASENOTE | 命令行参数可以由位置或关键字指定。前者的例子是'sqlldrscott/tigerfoo';后一种情况的一个示例是'sqlldrcontrol=foouserid=scott/tiger'。位置指定参数的时间必须早于但不可迟于由关键字指定的参数。例如,允许'sqlldrscott/tigercontrol=foologfile=log',但是不允许'sqlldrscott/tigercontrol=foolog',即使参数'log'的位置正确。 |
------------------------------------------
二、导出spool
在SQLplus 或在SQl命令行 输入
spool c:\test\spool.txtselect st.employer_nm||'|'||st.salary||'|'||st.department from salary_tbl st where LEADER_NM='雇佣者4';
spool off
就可以导出了
此时ctl 文件该怎么写才能正确导入呢 ?
其中 options skip 是选择跳过的行数 , 顺便使用支持中文导入的字符编码
options(skip=3)
load data
CHARACTERSET ZHS16GBK
infile 'spool.txt'
into table SALARY_TBL truncate
fields terminated by '|'(employer_nm ,salary ,department
)
二、外部表
外部表的数据不装入数据库中,数据库中只存储外部表的定义。实际数据位于操作系统中的平面文件中。外部表只读,可以通过select 进行查询。外部表可以由数据泵引擎生成的外部表。也可以通过文本文件生成的外部表
create table salary_tbl_external(employer_nm ,department ,salary ,leader_nm
)organization external -----指明外部表
(type oracle_datapump --利用数据泵来创建default directory MY_DIR --D:\DIRTEST1location ('sal1.dmp','sal2.dmp')
) parallelas select salary_tbl.employer_nm,salary_tbl.department,salary_tbl.salary,salary_tbl.leader_nm from salary_tbl
在MY_DIR 文件中有 SAL1.dmp 和SAL2.dmp文件。现在有了dmp文件可以通过外部表来创建外部表
create table salary_tbl_external2(employer_nm varchar2(20) ,department varchar2(20),salary number,leader_nm varchar2(20)
) organization external(type oracle_datapumpdefault directory MY_DIR --D:\DIRTEST1location ('sal1.dmp','sal2.dmp')
)
利用文本文件来创建外部表 现有txt文件
create directory C_test as 'C:\test';
--使用oracle_loader创建外部表,数据文件中每一行为数据行,字段按照 ‘|'划分
create table salary_tbl_external3(employer_nm varchar2(20) ,department varchar2(20),salary number,leader_nm varchar2(20)
) organization external(type oracle_loaderdefault directory C_test access parameters(records delimited by newline fields terminated by '|' )location ('data1.txt')
)select * from salary_tbl_external3
就可以查询了。
注意: 如果在access parameters 中 注释一些没有用的代码,系统认为这是不符合规则的语句,会产生错误ORA-29913
Oracle 原理:数据装载 ,SQLldr ,外部表相关推荐
- hive外部表改为内部表_3000字揭秘Greenplum的外部数据加载——外部表
外部表是greenplum的一种数据表,它与普通表不同的地方是:外部表是用来访问存储在greenplum数据库之外的数据.如普通表一样,可使用SQL对外部表进行查询和插入操作.外部表主要用于Green ...
- hive内部表和外部表的区别_3000字揭秘Greenplum的外部数据加载——外部表
外部表是greenplum的一种数据表,它与普通表不同的地方是:外部表是用来访问存储在greenplum数据库之外的数据.如普通表一样,可使用SQL对外部表进行查询和插入操作.外部表主要用于Green ...
- oracle临时表与外部表,Oracle中的临时表、外部表和分区表
在Oracle中,临时表是ldquo;静态rdquo;的,它与普通的数据表一样只需要一次创建,其结构从创建到删除的整个期间都是有效的.相 临时表 在Oracle中,临时表是"静态" ...
- 导入Excle数据至数据库 “外部表不是预期的格式”错误信息
在操作excel将数据从外部导入到数据库时, 刚开始操作的没有问题的,却报出了:"外部表不是预期的格式"错误信息. 仔细查看excel没有问题, 查阅资料,发现有人说: 解决方法: ...
- Oracle原理: 行级锁和表级锁
行级锁就是施放在行上的排他锁,表级锁就是会施放在表上的排他锁.锁分为两大类:共享锁和排它锁.共享锁的意思就是可以其他用户来锁定表,而排它锁不准其他用户来锁定表. 锁具有:一致性(只允许一个用户修改数据 ...
- ORACLE 通过数据值查找找表名和字段名
有时候,我们只知道数据值,但需要通过这个数据值去查找数据是存放在哪个表的哪个字段. DECLARE V_SQL VARCHAR2(2000); V_COUNT NUMBER; BEGIN FOR I ...
- 外部表如何导入mysql_如何利用Oracle外部表导入文本文件的数据
Oracle外部表支持两种类型的驱动:一种是ORACLE_LOADER,外部表的数据必须来源于文件文件,另一种则是ORACLE_DATAPUMP,外部表的 同事最近在忙数据一致性比对工作,需要对不同文 ...
- Oracle的外部表
一.外部表特性 数据文件位于操作系统之外,并且具有一定的格式分割的文本文件或其他类型文件.ORACLE的外部表通过SQL的形式访问数据文件中的数据,数据并不需要加载到数据库中且数据是可读的,所以不用D ...
- Oracle 外部表
外部表是指不存在于数据库中的表.通过向Oracle 提供描述外部表的元数据,可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问.外部表是对数据库表的延伸. ...
- Oracle教程之管理表(六)--Oracle外部表的管理
外部表是表结构被存放在数据字典,而表数据被存放在OS文件的表.通过使用外部表,不仅可以在数据库中查询OS文件的数据,还可以使用INSERT方式将OS文件数据装载到数据库中,从而实现SQL*Loader ...
最新文章
- Codeforces Round #313 (Div. 1) B. Equivalent Strings
- 数据结构与算法之数组
- 深入学习SAP UI5框架代码系列之四:SAP UI5控件的元数据实现
- gradle之gradlew最全指令攻略
- 关于mysql-connector-net在C#中的用法
- Java并发编程笔记之FutureTask源码分析
- 如何在Go中实现Elasticsearch
- java工程师试卷,Java工程师试卷A
- va_list函数族应用
- spring aop实例讲解_Spring核心技术详解(一)
- KMP算法的浅显解释
- 计算机网络学习笔记(30. DNS记录和消息)
- cas4.0 mysql_【SSO单点系列】:CAS4.0 CAS整合SpringMVC+MyBatis实现数据库校验(04)
- yui compressor php,通过yuicompressor-2.4.7压缩css或js的php应用文件
- 计算机网络第五版笔记
- UTONMOS:中国区块链专利申请数量占全球总量的84%
- 爬虫实战—豆瓣250榜单的爬取
- 解决VBE6EXT.OLB不能被加载问题
- 2022暑期牛客多校训练第5场 A.Don‘t Starve
- SameSite Cookie问题处理解决方案(谷歌Chome浏览器出现Whitelabel Error Page或者不停请求现象解决)
热门文章
- 聊聊asp.net中Web Api的使用
- 关于css3的自定义字体
- 获取iOS设备的型号
- idea mac 快键键
- linux下find查找带有指定权限的文件(windows下编译的源代码文件)
- 2013第51周二eclipse启动优化
- [转载] 七龙珠第一部——第034话 红缎带军团
- [转]小硕3年是怎样发6篇SCI的
- android10分区镜像,分区和映像 | Android 开源项目 | Android Open Source Project
- linux shell实现go.mod迁移后版本号的更新问题(技能点:sed删除行自定义分隔符;文件的过滤后遍历)