SQL*Loader的使用总结(三)

2024-06-06 06:38

本文主要是介绍SQL*Loader的使用总结(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SQL*Loader对不同文件及格式的处理方法

1.多个数据文件,导入同一张表

通常对于逻辑比较复杂的系统可能存在这种情况,因为导出的数据来源于多个系统, 因此可能提供给DBA的也是多个数据文件。这种情况并不一定需要执行多次加载,只需要在控制文件中做适当配置即可。不过有一点非常重要,提供的数据文件中的数据存放格式必须完全相同。

创建演示表Manager表

--创建Manager表
CREATE TABLE MANAGER
(
MGRNO     NUMBER,
MNAME     VARCHAR2(30),
JOB       VARCHAR2(300),
REMARK    VARCHAR2(4000)
);
Table created.
有多个数据文件,分别如下:

--数据文件1
[oracle@cancer ~]$ cat ldr_case8_1.dat 
10,SMITH,SALES MANAGER
11,ALLEN.W,TECH MANAGER
16,BLAKE,HR MANAGER--数据文件2
[oracle@cancer ~]$ cat ldr_case8_2.dat 
12,WARD,SERVICE MANAGER
13,TURNER,SELLS DIRECTOR
15,JAMES,HR DIRECTOR--数据文件3
[oracle@cancer ~]$ cat ldr_case8_3.dat 
17,MILLER,PRESIDENT

创建控制文件,制定多个INFILE参数即可,控制文件如下:

--控制文件
[oracle@cancer ~]$ cat ldr_case8.ctl 
LOAD DATA
INFILE ldr_case8_1.dat
INFILE ldr_case8_2.dat
INFILE ldr_case8_3.dat
TRUNCATE INTO TABLE MANAGER
FIELDS TERMINATED BY ","
(MGRNO,MNAME,JOB)
执行sqlldr命令,并查看结果

--执行sqlldr命令
[oracle@cancer ~]$ sqlldr scott/tiger control=ldr_case8.ctl 
Commit point reached - logical record count 3
Commit point reached - logical record count 6
Commit point reached - logical record count 7--查看结果
SQL> select * from manager;MGRNO MNAME      JOB		   REMARK
---------- ---------- -------------------- ----------10 SMITH      SALES MANAGER11 ALLEN.W    TECH MANAGER16 BLAKE      HR MANAGER12 WARD       SERVICE MANAGER13 TURNER     SELLS DIRECTOR15 JAMES      HR DIRECTOR17 MILLER     PRESIDENT
2.同一个数据文件,导入不同表
控制文件提供了多种逻辑判断方式,只要能把逻辑清晰地描述出来,SQL*Loader就能 按照指定的逻辑执行加载。

数据文件如下:

--数据文件
[oracle@cancer ~]$ cat ldr_case9.dat 
BON  SMITH CLEAK       3904
BON  ALLEN SALER,M     2891
BON  WARD  SALER,"S"   3128
BON  KING  PRESIDENT   2523
MGR  10 SMITH    SALES MANAGER
MGR  11 ALLEN.W  TECH MANAGER
MGR  16 BLAKE    HR MANAGER
TMP  SMITH 7369 CLERK    1020 20
TMP  ALLEN 7499 SALESMAN 1930 30
TMP  WARD  7521 SALESMAN 1580 30
TMP  JONES 7566 MANAGER  3195 20
需求是将MGR开头的记录导入到Manager表,以BON开头的记录导入到BONUS表,其他记录存放到废弃文件中,创建控制文件如下:

--控制文件
[oracle@cancer ~]$ cat ldr_case9.ctl
LOAD DATA
INFILE ldr_case9.dat
DISCARDFILE ldr_case9.dsc
TRUNCATE 
INTO TABLE BONUS
WHEN TAB='BON'
(
TAB FILLER POSITION(1:3),
ENAME POSITION(6:10),
JOB POSITION(*+1:20),
SAL POSITION(*+3:27)
)
INTO TABLE MANAGER
WHEN TAB='MGR'
(
TAB FILLER POSITION(1:3),
MGRNO POSITION(6:7),
MNAME POSITION(9:15),
JOB POSITION(*+2:30)
)
虽然这个控制文件看起来比之前的都要复杂,但只有一个新语法,即关键字,我们这里通过WHEN来实现判断,很容易理解。同时,指定了DISCARDFILE参数,以生成不满足加载条件的废弃文件,如果你有心,不妨等执行完sqlldr命令后査看ldr_case9.dsc文件和ldr_case9.log文件。
另外注意,控制文件中WHEN逻辑判断不支持OR关键字,因此如果你的判断条件有多个,则只能通过AND连接,而不能直接使用OR。
执行sqlldr命令,并查看结果

--执行sqlldr命令
[oracle@cancer ~]$ sqlldr scott/tiger contro

这篇关于SQL*Loader的使用总结(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035363

相关文章

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤