最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

TIPTOP另一种EXCEL上传方法

开发相关 bron1984 7204浏览

这种方法适用于大数量导入,支持中文。这种方法本质上是在通过sqlldr导入文本数据,而不是EXCEL。

首先第一步,需要将EXCEL另存为CSV

然后在程序中上传这份CSV

全部程序就不帖了。关键代码如下


#....前面上传等步骤省略
#清空临时表( 临时表需要提前建立好 本例中是 cims300_tmp )
    CALL cl_del_data("cims300_tmp")
#DELETE FROM cims300_tmp WHERE 1=1;
   #上传为cims300_tmp.csv,等待处理,注意是 tmp
   IF NOT cl_upload_file(tm.path, '/u1/doc/cims300_tmp.csv') THEN
        CALL cl_err(NULL, "lib-212", 1)
        RETURN FALSE
   END IF 
   #删除已有文件,正式文件,没有tmp
   RUN " rm -f /u1/doc/cims300.csv "
   LET g_msg=NULL
   #使用iconv将gbk编码转化为utf-8编码 为了适应中文导入。注意文件名已经由tmp转成没有tmp
   LET g_msg = "iconv -f GBK -t UTF-8 /u1/doc/cims300_tmp.csv -o /u1/doc/cims300.csv"
   RUN g_msg
   #授权
   LET g_msg="chmod 777 /u1/doc/cims300.csv 2>/dev/null"
   RUN g_msg 
   LET g_msg=NULL
   #关键一步,oracle通过sqlldr导入文本数据 ,具体使用方法请自行百度
   LET g_msg = "sqlldr userid=",g_plant,"/",g_plant," control=/u1/doc/cims300.ctl log=/u1/doc/cims300.log"
   RUN g_msg
   #确认临时表中有数据了
   LET g_cnt = 0
   SELECT COUNT(*) INTO g_cnt FROM cims300_tmp WHERE C1 != '料件编号'
   IF g_cnt > 0 THEN
       #开始处理
       CALL cims300()
   ELSE
       CALL cl_err('insert_prep:','anm-259',1)# EXIT PROGRAM
       LET sql_state ='N'
   END IF

附上cims300.ctl的写法

load data
infile '/u1/doc/cims300.csv'
append into table cims300_tmp
when C1<>''
fields terminated by ',' Optionally enclosed by '"' 
(C1,C2,C3,C4,C5,C6,C7)

转载请注明:赫非域 » TIPTOP另一种EXCEL上传方法