如何将CSV文件导入到ORACLE
2017-09-12 11:12
645 查看
iamlaosong文
将CSV文件导入到ORACLE的方法网上很多,比较常见的方法是用PL/SQL Developer的Text Importer和Sqlldr,考虑到数据量大,觉得还是将文件FTP到服务器,再用sqlldr速度会比较快。由于CSV文件名不定,所以采用自动生成控制文件的方法来导入。脚本如下:
控制文件用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
参见:csv文件中的数据导入到oracle数据库中的方法
用Oracle sqlldr导入文本文件TXT 总结
sqlldr的用法 (这个最完整)
==============================================================
附: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程序中以“#”开头的正文行表示注释。
将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
参见:csv文件中的数据导入到oracle数据库中的方法
用Oracle sqlldr导入文本文件TXT 总结
sqlldr的用法 (这个最完整)
==============================================================
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程序中以“#”开头的正文行表示注释。
相关文章推荐
- oracle中如何将csv格式文件导入table
- 如何使用PL/SQL导入CSV文件到Oracle
- 低版本 Oralce 如何导入高版本 Oracle 导出的文件
- --如何在oracle中导入dmp数据库文件?转载
- oracle导入csv文件
- 如何避免Oracle Form界面倒入.csv文件出现乱码
- 使用SQL*Loader将CSV文件数据导入ORACLE数据表
- 如何在oracle中导入dmp数据库文件
- Liunx系统如何导入dmp文件到oracle
- oracle 数据导入--CSV文件
- 如何在oracle中导入dmp数据库文件
- 如何在oracle中导入dmp数据库文件
- 从Excel(CSV)文件导入数据到Oracle
- 向oracle中导入*.csv文件
- Linux下Oracle如何导入导出dmp文件详解
- 向oracle中导入*.csv文件
- 如何避免Oracle Form界面倒入.csv文件出现乱码
- 如何在Oracle中导入dmp文件
- 如何在oracle中导入dmp数据库文件
- 如何将 JSON, Text, XML, CSV 数据文件导入 MySQL