sqlldr csv 导入到oracle 怎么全带双引号,如何将CSV文件导入到ORACLE

iamlaosong文

将CSV文件导入到ORACLE的方法网上很多,比较常见的方法是用PL/SQL Developer的Text Importer和Sqlldr,考虑到数据量大,觉得还是将文件FTP到服务器,再用sqlldr速度会比较快。由于CSV文件名不定,所以采用自动生成控制文件的方法来导入。脚本如下:

. /home/oracle/.bash_profile

BAKDIR=/home/oracle/ems_eyb

CTLFILE=control.ctl

cd ${BAKDIR}

for csvfile in *.csv

do

# process csvfile

echo ${csvfile}

# read -p "csv file: press enter to continue..." var

if [ -f ${csvfile} ]; then

# generate control file

echo load data>${CTLFILE}

echo infile "'${csvfile}'">>${CTLFILE}

echo append into table emsapp_gjyj_eyb>>${CTLFILE}

echo fields terminated by "','">>${CTLFILE}

echo optionally enclosed by "'\"'">>${CTLFILE}

echo "(jszq,jgmc,jgdm,yjj,jdj,ffrq,yjzhl,zdfdjjg,zdfzljg,zdf,yjyfhj,yjfyhj,sjzt,qtzt,ysly,yshb,xzhdly,xzhdhb,szkyffl,szkgdyf,sbfzkdhd,sbfzkdhb,gdbz,gdsdm,ffsdm,cfhdhd1,cfhdhb1,hd1fl,hd1yf,hd1fllx,hd1flssz,cfhdhd2,cfhdhb2,hd2fl,hd2yf,hd2fllx,hd2flssz,cfhdhd3,cfhdhb3,hd3fl,hd3yf,hd3fllx,hd3flssz,yjlx,yjsx,zbxlh,zbh,ydh,yjh,sjrq,xtxh,cfhdhd4,cfhdhb4,hd4fl,hd4yf,hd4fllx,hd4flssz,cfhdhd5,cfhdhb5,hd5fl,hd5yf,hd5fllx,hd5flssz,yddaih,sjly)">>${CTLFILE}

# import data

sqlldr userid=emssxjk/emssxjk control=control.ctl skip=1

mv ${csvfile} all_csv

fi

done

控制文件用echo命令生成,注意控制文件中需要的单引号、逗号、括号等在echo命令中要用双引号括起来,而双引号本身需要加个反斜杠转意。即:

echo fields terminated by "','"的结果是 fields terminated by ‘,’

echo optionally enclosed by "'\"'"的结果是 optionally enclosed by ‘”’

导入命令(其中skip=1是跳过首行):

sqlldr userid=emssxjk/emssxjk control=control.ctl skip=1

==============================================================

附:shell中的引号

1、双引号 由双引号括起来的字符,除$、倒引号(`)和反斜线(\)仍保留其特殊功能外,其余字符均作为普通字符对待。

“$”表示变量替换,即用其后指定的变量的值来代替$和变量;

倒引号表示命令替换;

仅当“\”后面的字符是下述字符之一时,“\”才是转义字符,这些字符是:“$”、“`”、“"”、“\”或换行符。转义字符告诉Shell不要对其后面的那个字符进行特殊处理,只是当作普通字符。

例如:

$ echo "My current dir is `pwd` and logname is $LOGNAME"

My current dir is /home/mengqc and logname is mengqc

2、单引号

由单引号括起来的字符都作为普通字符出现。

例如,

$ echo 'The time is ` date ` , the file is $HOME/abc '

The time is ` date ` , the file is $HOME/abc

3、反引号

倒引号括起来的字符串被shell解释为命令行,在执行时,Shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。在前面示例中已经见过。

例如,

$ echo current directory is ` pwd `

current directory is /home/mengqc

注释 Shell程序中以“#”开头的正文行表示注释。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值