本来是练习三思的书里一个sqlldr的小示例,就是把excel文件另存为csv后通过sqlldr加载到Oracle数据库中。其目的本来是为了演示一下csv文件的sqlldr以及csv文件中的字符串中存在逗号, 和双引号”的处理方法,结果却引出了一个让我困惑了一阵子的问题,说大不大说小不小,反复测试了一番,怀疑到了一个点上,最后一查果然是那个样子,再测试就通过了,下面总结一下。

顺便记录一个:

三思说要创建scott这个经典的schema要运行$ORACLE_HOME/rdbms/admin/scott.sql这个脚本的内容,而实际上我并没找到这个脚本,找到并运行的是utlsampl.sql

excel是这样子的:

SMITH

CLEAK

3904

ALLEN

SALER,M

2891

WARD

SALER,"S"

3128

KING

PRESIDENT

2523

另存为'ldr_case2.csv'后内容是:

SMITH,CLEAK,3904

ALLEN,"SALER,M",2891

WARD,"SALER,""S""",3128

KING,PRESIDENT,2523

一切看起都挺正常的,然后将csv上传到Oracle所在的linux服务器上,写好control文件:

load data

infile 'ldr_case2.csv'

truncate into table bonus

fields terminated by ',' optionally enclosed by '"'

(ename,job,sal)

执行加载后日志显示为失败:

Table BONUS, loaded from every logical record.

Insert option in effect for this table: TRUNCATE

Column Name                  Position  Len  Term Encl Datatype

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

ENAME                              FIRST    *  ,  O(") CHARACTER

JOB                                  NEXT    *  ,  O(") CHARACTER

SAL                                  NEXT    *  ,  O(") CHARACTER

Record 1: Rejected - Error on table BONUS, column SAL.

ORA-01722: invalid number

Record 2: Rejected - Error on table BONUS, column SAL.

ORA-01722: invalid number

Record 3: Rejected - Error on table BONUS, column SAL.

ORA-01722: invalid number

Record 4: Rejected - Error on table BONUS, column SAL.

ORA-01722: invalid number

反复测试后,终于发现我把文件中的内容放到在linux下新建的文件中,加载OK,但是看起内容一样的csv怎么改都不行,我就怀疑看起来一样的东西是不是隐藏了什么不为我察觉的差异。带着这个疑问上网搜索了一下,果然有人遇到相同的问题,隐藏的差异就是csv文件行末藏了回车符。在linux下查看对比:

[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.csv

SMITH,CLEAK,3904^M

ALLEN,"SALER,M",2891^M

WARD,"SALER,""S""",3128^M

KING,PRESIDENT,2523^M

[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.dat0

SMITH,CLEAK,3904

ALLEN,"SALER,M",2891

WARD,"SALER,""S""",3128

KING,PRESIDENT,2523

原来作祟的就是文件行末的^M啊!!!

把csv文件转一下格式:

[oracle@nathan-rhel5 ~]$ dos2unix ldr_case2.csv

dos2unix: converting file ldr_case2.csv to UNIX format ...

[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.csv

SMITH,CLEAK,3904

ALLEN,"SALER,M",2891

WARD,"SALER,""S""",3128

KING,PRESIDENT,2523

然后再重新加载一次数据成功了:

[oracle@nathan-rhel5 ~]$ vi ldr_case2.ctl

load data

infile 'ldr_case2.csv'

truncate into table bonus

fields terminated by ',' optionally enclosed by '"'

(ename,job,sal)

[oracle@nathan-rhel5 ~]$ sqlldr scott/tiger control=ldr_case2.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Sat Feb 22 22:47:31 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Commit point reached - logical record count 4

[oracle@nathan-rhel5 ~]$ vi ldr_case2.log

Control File:  ldr_case2.ctl

Data File:      ldr_case2.csv

Bad File:    ldr_case2.bad

Discard File:  none specified

(Allow all discards)

Number to load: ALL

Number to skip: 0

Errors allowed: 50

Bind array:    64 rows, maximum of 256000 bytes

Continuation:    none specified

Path used:      Conventional

Table BONUS, loaded from every logical record.

Insert option in effect for this table: TRUNCATE

Column Name                  Position  Len  Term Encl Datatype

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

ENAME                              FIRST    *  ,  O(") CHARACTER

JOB                                  NEXT    *  ,  O(") CHARACTER

SAL                                  NEXT    *  ,  O(") CHARACTER

Table BONUS:

4 Rows successfully loaded.

oracle创建用户saler,Linux环境下sqlldr一个csv文件相关推荐

  1. Linux环境下移动一个文件夹下的所有文件到另一个文件夹

    Linux环境下移动一个文件夹下的所有文件到另一个文件夹 研究命令 最近需要把一个环境里的文件,迁移到另一个环境里去,但是两个环境里的数据会有一些同名的子目录,要求不能覆盖数据而是合并,迁移之前我先做 ...

  2. linux 普通用户退出vim,Linux环境下VI/VIM编辑文件时无权限保存的解决方法(普通用户)...

    在Linux环境下,如果直接使用VI/VIM命令编辑没有修改权限的文件时,保存的时候就会提示用户无法进行保存操作,一般的解决方法只能是关闭文件重新以sudo权限打开该文件编辑后再保存(前提是用户具有s ...

  3. Linux环境下编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜

    题目:编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜,如果用户猜的数大于答案,则提示大了,如果用户猜的数小于答案,则提示小了.当用户猜对时提示:猜对了. #! /bi ...

  4. 结合xxx.cpp:(.text+0x55):对‘xxx’未定义的引用剖析Linux环境下动态库.so文件

    操作系统:Linux系统 场景:g++编译,连接动态库文件时 错误示例(中文): /tmp/cccgNNpb.o:在函数'main'中: test.cpp:(.text+0x55):对'myprint ...

  5. 【Linux/Ubuntu】linux环境下如何读取doc文件(不是docx文件!!!)

    首先下载:antiword点击此单词,即可进行下载 http://www.winfield.demon.nl/linux/antiword-0.37.tar.gz tar -zxvf antiword ...

  6. Flameshot:Linux 环境下的一个简洁但功能丰富的截图工具

    1. 安装 在 Debian 10+ 和 Ubuntu 16.04+ 中,可以使用 apt 包管理器来安装它: sudo apt-get install flameshot 2. 使用 3. 下载 步 ...

  7. Linux环境下实现一个简单socket通信

    大二学计算机网络时留下的一个坑,具体API的实现不太清楚,但照着做程序运行成功了 编写服务端SERVER程序 #include <sys/types.h> #include <sys ...

  8. Linux环境下mysql的日志

    MySQL日志 一.日志概述 1.日志作用 ​ MySQL日志记录了MySQL数据库日常操作和错误信息.MySQL有不同类型的日志文件(各自存储了不同类型的日志),从日志当中可以查询到MySQL数据库 ...

  9. linux监控php脚本执行时间,在LINUX环境下定时执行php脚本

    1. 使用Crontab定时执行linux环境下的php脚本文件 Cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务.所有用户定义的 c ...

最新文章

  1. object-c中管理文件和目录:NSFileManager使用方法
  2. Nature新研究:酒精导致的DNA损伤能被安全修复,为降低酒精性癌症发病率开辟机会...
  3. “请给我一个五彩斑斓的黑”,只需一行命令就能让AI画画,OpenAI的Dall-E被大神复现...
  4. 如何保证access_token长期有效
  5. IIS6.0官方技术必读
  6. 联想继续为其硬件产品完善Linux支持
  7. 家庭作业(信息学奥赛一本通-T1430)
  8. linux 高级文件IO
  9. 软件开发文档-详细设计文档
  10. Matlab绘制柱状图(含显著性差异*)
  11. 股票大作手回忆录读书笔记
  12. iPad及BT4下的WEP破解实验与分析 | Network Security
  13. 蚂蚁金服首席架构师:区块链技术如何促进数字普惠金融
  14. html+angularjs+redis获取后台数据模拟京东/天猫的商品分类导航
  15. 优化代码中的“坏味道”
  16. 用Python分割文件夹
  17. 神经网络(九)无监督学习
  18. 读松下幸之助自传有感
  19. 英国电信进行下一代SDN测试
  20. 基于Twitter的Snowflake算法实现的分布式ID生成器

热门文章

  1. 处理.Dwg文件用哪种技术方案?ObjectARX,RealDWG还是Teigha(ODA)?
  2. 遍历HashMap中元素的三种方法
  3. 队列、堆、栈、堆栈的区别?
  4. JAVA中的CAS算法
  5. 收费数万元的考研“协议班”藏猫腻,授课质量差,退费老大难
  6. Oracle删表报错ora00054,Oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
  7. C语言system()函数
  8. 苹果开发者账号的那些坑
  9. 4.Executor执行器
  10. 5G/NR中RRC的三种状态(idle, active, inactive)