使用ctl将txt或csv文件导入表数据

使用ctl将txt导入表数据

1.先用sh导出txt源数据;

2.写一份ctl文档;

3.最后用sqlldr命令根据ctl文档的字段配置将txt源数据导入到目标表;

 

步骤1范例,生成TMP_HELPER_ACCOUNT.txt文档

#!/bin/sh

sqlplus -S ha/ha2017@fdb >TMP_HELPER_ACCOUNT.txt<< EOF

set heading off                                            

set pagesize 0;                                            

set feedback off;                                          

set verify off;                                            

set echo off;                                              

SET LINESIZE 6000;                                                                                                     

select user_id ||'$'||helper_id ||'$'||helper_name ||'$'||is_secretary ||'$'||is_residency from TMP_HELPER_ACCOUNT ;                                    

exit;

EOF

echo '666'

步骤2范例,创建TMP_HELPER_ACCOUNT.ctl文档

load data

append into table TMP_HELPER_ACCOUNT

fields terminated by '$'

OPTIONALLY ENCLOSED BY '"'

TRAILING NULLCOLS (user_id

,helper_id

,helper_name

,is_secretary

,is_residency )

步骤3范例,(TMP_HELPER_ACCOUNT.txt和TMP_HELPER_ACCOUNT.ctl要上传到同一目录 )

执行 sqlldr userid=ha/ha2018@fdb2018 control=TMP_HELPER_ACCOUNT.ctl data=TMP_HELPER_ACCOUNT.txt  rows=100000 errors=100000 direct=true;

 

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

使用ctl将csv导入本地的表


(先excel文件另存为csv文件(这份csv不知道编码),再ue新建一个文件,设置为utf-8文件(高级-配置-编辑器-编码类型:选中 新建UTF-8 编码文件),再把当时另存为的csv的数据复制到这份utf-8文件中,文件命名testimp-utf-8.csv)
1.本地: 使用WCP 把 testimp-utf-8.csv 和 testimp.ctl 放到 /home/pap_etl/etl_bas/pap_shell 目录。

2.执行本地终端 ,设置字符集为utf-8。(Terminal -> Appearance-> Character encoding: 选择UTF-8 )
测试机Linux配置:10.9.13.87
 pap_etl/CEik46oYh49T2HM$
shell目录 /home/pap_etl/etl_bas/pap_shell

3.执行以下命令

sqlldr userid=hainan/hainan2017@fpydb control=/home/pap_etl/etl_bas/pap_shell/testimp.ctl ;

#sqlldr userid=hainan/hainan2017@fpydb control=testimp.ctl ; 这种绝对路径也是可以的


---这样就导入到本地的 t_imp_stu1表,可以比较了

 

ctl范例:指定某个csv文件 infile可用绝对路径和相对路径

load data
infile '/home/pap_etl/etl_bas/pap_shell/testimp-utf-8.csv'

append into table t_imp_stu1

fields terminated by ','

OPTIONALLY ENCLOSED BY '"'

TRAILING NULLCOLS (id
,name
,id_card
,xueji
,jiuxue_status
,zaidu_school
,zaidu_xueduan
,is_shouzhu
,file_name )

 

 

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

 

/*
----查看用户登录时自动加载的用户配置文件 里面可以看到编码格式如 export LANG=zh_cn.UTF-8
cat .bash_profile

----让上面的设置生效
source .bash_profile

----csv文件也utf-8编码,再用ctl导入数据库,中文就不会出现类似?的乱码了。

*/

posted @ 2018-03-23 16:57  江清风  阅读(1103)  评论(0编辑  收藏  举报