免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 邪气丨战魄
打印 上一主题 下一主题

[文本处理] 想通过shell脚本,读取txt文件,插入到Oracle数据库中,求大神帮忙啊 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2014-07-29 15:49 |只看该作者
回复 30# Shell_HAT


报错信息如下:  还有就是 SQL 命令不能退出啊

./test.sh: line 11: IMPORT_TEST: command not found
dos2unix: converting file a.txt to UNIX format ...
exit

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 7月 29 15:32:10 2014

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


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

INSERT INTO $TABLENAME VALUES(15304,?..?.О1,74543184-1,2014.,20140430)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(19051,?..?.О2,79247030,2014.,20140430)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(18386,?..?.О3,16664083-3,2014.,20140515)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(22283,?..?.О4,66731611-8,2014.,20140526)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(16616,?..?.О5,73952011-9,2013.,20131021)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(15627,?..?.О6,73637776-7,2014.,20140319)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(20727,?..?.О7,7931258-3,2014.,20140526)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(17907,?..?.О8,21440016-5,2013.,20130926)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(17778,?..?.О9,79670089-6,2013.,20130819)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(19615,?..?.О10,520000000027994,2013.,20130715)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(19584,?..?.О11,75150549-9,2013.,20130703)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(25226,?..?.О12,,2014.,20140701)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(22227,?..?.О13,79914821-6,2014.,2014022
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(17090,?..?.О14,72442811-7,2013.,2013082
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(17753,?..?.О15,70219691-7,2013.,20130314)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(18513,?..?.О16,74241519-2,2014.,20140607)
            *
ERROR at line 1:
ORA-00911: invalid character


INSERT INTO $TABLENAME VALUES(19728,?..?.О17,71809837锛.,2014.,20140514)
            *
ERROR at line 1:
ORA-00911: invalid character


SQL>

   

论坛徽章:
0
32 [报告]
发表于 2014-07-29 15:59 |只看该作者
回复 22# li0924

你参考顶楼的文件,写一下呗,我是了一下 导不进去数据,应该是分隔符的问题


   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
33 [报告]
发表于 2014-07-29 21:30 |只看该作者
回复 31# 邪气丨战魄
  1. filename="a.txt"
  2. sqlfile="test.sql"
  3. dos2unix $filename
  4. sed 's/^/INSERT INTO table_name VALUES(\x27/; s/\x7f./\x27,\x27/g; s/$/\x27);/' $filename  > $sqlfile
  5. echo "" >> $sqlfile
  6. echo exit >> $sqlfile
  7. sqlplus DB_USER/DB_PASS@DB_SID @$sqlfile
复制代码

论坛徽章:
0
34 [报告]
发表于 2014-07-30 11:05 |只看该作者
本帖最后由 weikle 于 2014-07-30 11:06 编辑

请教楼上,x27和x7f啥东东?

论坛徽章:
0
35 [报告]
发表于 2014-07-31 09:55 |只看该作者
回复 33# Shell_HAT


已经测试成功了 ,非常感谢!

我还想麻烦你下 ,就是将数据插入到数据库表中的时候,可以在数据表中加一个字段 显示为插入时间的字段,这个该怎么写?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
36 [报告]
发表于 2014-07-31 09:57 |只看该作者
回复 34# weikle


    ASCII码

论坛徽章:
0
37 [报告]
发表于 2014-07-31 09:58 |只看该作者
回复 6# li0924


你好,6楼的方法不能将 顶楼文件中的分隔符转换为逗号 ,你能再看下么?


   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
38 [报告]
发表于 2014-07-31 10:04 |只看该作者
回复 35# 邪气丨战魄
  1. filename="a.txt"
  2. sqlfile="test.sql"
  3. dos2unix $filename
  4. TIME_NOW=`date "+%Y-%m-%d %H:%M:%S"`
  5. sed "s/^/INSERT INTO table_name VALUES(\x27/; s/\x7f./\x27,\x27/g; s/$/\x27,\x27${TIME_NOW}\x27);/" $filename  > $sqlfile
  6. echo "" >> $sqlfile
  7. echo exit >> $sqlfile
  8. sqlplus DB_USER/DB_PASS@DB_SID @$sqlfile
复制代码

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
39 [报告]
发表于 2014-07-31 11:47 |只看该作者
回复 37# 邪气丨战魄

HAT不是给你了答案吗? 我是不知道你提供文本隐含符号是什么?
  1. sed 's#\x7f.#,#g' file > a.txt
复制代码

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
40 [报告]
发表于 2014-07-31 11:51 |只看该作者
回复 38# Shell_HAT
oracle其实有sysdate函数;所以那个TIME_NOW可不用定义。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP