ITPUB论坛-专业的IT技术社区

标题: (原创)小招技巧3: EXCEL文件导入数据库 [打印本页]

作者: oldwain    时间: 2003-3-11 11:02
标题: (原创)小招技巧3: EXCEL文件导入数据库
嗨! 这个问题你可能有很多好方法.
不过多学一种不是坏事.

你用的方法可能是:
1. 存成txt文件, 再用sql*loader
2. 存成txt文件, 再用第三方工具(如pb, delphi, toad, pl/sql dev等)导入.

sql*loader用起来费劲, 为了小小的需求, 装一个第三方工具麻烦.
看看我的方法.

比如文件中有id, name两列(分别为A列和B列), 要导入的表为person(person_id, person_name)

在excel 文件的sheet的最右列, 添加一列, 对应第一行数据的单元格写入以下内容:

= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"

然后把这一行复制到所有数据行对应的列中.

这一列的内容拷贝出去保存, 即成为可以直接在sql*plus下运行的脚本.


(需要引用, 请注明出处www.itpub.net, by oldwain)
作者: ssssss24    时间: 2003-3-11 15:21

试试这个:

把Excel文件导到Acess里,然后打开要导数据的表。

打开 PLSQL DEV,打开一个SQL窗口,执行
select * from [tab] for update

然后一列一列的从Acess里copy & paste 。

。。。

完成。。。



[/FONT]
作者: like_7412    时间: 2003-3-11 16:07
老大的两个办法我都用过!
作者: jqs    时间: 2003-3-11 18:51
标题: 方法一對日期型欄位不适用
方法一對日期型欄位不适用
作者: eygle    时间: 2003-3-11 19:36
我再帮老大增加个方法
excel->copy->pl/sql developer>paste

参考
http://www.itpub.net/showthread.php?s=&threadid=97652
作者: oldwain    时间: 2003-3-11 21:42
最初由 eygle 发布
[B]我再帮老大增加个方法
excel->copy->pl/sql developer>paste

[/B]


呵呵, 经常从pl/sql dev往外copy, 倒是一直没注意到可以直接Paste进来.
作者: armok    时间: 2003-3-11 22:07
呵呵,不错的小技巧啊。 我在这里转载了:

http://61.144.28.248:8080/d6i/bb ... 841&bbsPageNo=1

谢谢。
作者: oldwain    时间: 2003-3-11 22:32
呵呵, 谢谢.
作者: KingSunSha    时间: 2003-3-12 04:10
我常用的办法是从excel中copy到ultraEdit中,然后用列编辑功能加上insert into ....等等,也挺好用
作者: armok    时间: 2003-3-12 08:08
实际操作时发现,使用 copy / paste 经常会发生莫其妙的问题。尤其是通过 access ( ODBC) copy 入 oracle 时。我习惯使用 excel (客户经常给这种格式) ---> access --> 格式文本 ---> sql*ldr.

我以前也写过一篇很详细的操作范例:


http://61.144.28.248:8080/d6i/bb ... o=1&topicKind=8
作者: 卓玛    时间: 2003-3-12 08:56
EXECL  -->SAVE AS *.CSV(COMMA DELIMITED). THEN LOAD IT DIRECTLY.


CTL FILE EXAMPLE
------------
Load Data
INFILE 'E:\AA.csv'
TRUNCATE
INTO TABLE AA
FIELDS TERMINATED BY ','
(A,
B)
------------
作者: jgwang    时间: 2003-3-12 09:07
标题: 一点补充
SUBSTITUTE(B1, "'", "''"

in which case it can escape single quotes.
作者: 嘟嘟子    时间: 2003-3-14 16:51
最初由 KingSunSha 发布
[B]我常用的办法是从excel中copy到ultraEdit中,然后用列编辑功能加上insert into ....等等,也挺好用 [/B]


列编辑?? 怎么用?? 没找到这个选项啊?是不是替换??
作者: pbxia    时间: 2003-5-10 15:02
标题: u
content
作者: lodge    时间: 2003-5-10 18:54
用ODBC建DNS到EXCLE文件上, 用ACCESS连接ORACLE和DNS然后................
作者: sjianbin    时间: 2003-5-29 12:05
在ACCESS中将ORACLE TABLE 映射,然后直接插入即可。很方便,也没发现有数据错误问题。
曾经有一个很麻烦的LONG RAW问题,用这个办法也解决了
作者: WANG2    时间: 2003-8-7 16:30
天哪,你们都不知道 TOAD 这个工具么?
作者: aaahhh    时间: 2003-8-7 19:01
TOAD是什么东西? 蟾蜍 ?

最初由 WANG2 发布
[B]天哪,你们都不知道 TOAD 这个工具么? [/B]

作者: hoozi    时间: 2003-8-7 19:19
标题: 用MS——sqlserver
用MS_sqlserver 提供的数据导出导入功能可以方便的把excel方便的导入oracle数据库
作者: hjxokok    时间: 2003-8-9 08:46
正好解决我的问题,顶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: pfox    时间: 2003-8-11 21:05
用SQL*XL就可以直接将EXCEL文件导入ORACLE,很方便的,我一直用SQL*XL。
作者: tommiebeny    时间: 2003-8-17 23:31
标题: sql*loader 挺好用的
速度不错
作者: wangcunjiang    时间: 2003-8-18 15:21
偶也这么用过:)
最初由 KingSunSha 发布
[B]我常用的办法是从excel中copy到ultraEdit中,然后用列编辑功能加上insert into ....等等,也挺好用 [/B]

作者: zppp    时间: 2003-8-18 20:19
hi pfox

能不能传一个SQL*XL上来,我也听说过它,但一直没有找到。
作者: sladeh    时间: 2003-8-19 11:20
标题: 方法多多
最简单的就是用MS的DTS直接将数据导入

或者用上面提到的ACCESS中转的方式,都方便

其它的办法也可以
就看你自己熟悉那些东西了

个人觉得大家应该对MS的东西都熟悉吧
作者: perfectsummer    时间: 2003-9-11 15:41
用plsql developer,很好用的,直接copy就可以了
作者: legumer    时间: 2003-9-20 12:47
可不可以直接将dbf文件写入数据库中一张相同结构的表中,这个该如何操作呢。望指点。
作者: SYHCPU    时间: 2003-9-27 14:07
标题: 有关SQLLDR的问题
控制文件:input.ctl,内容如下:
  load data           --1、控制文件标识
  infile 'test.txt'       --2、要输入的数据文件名为test.txt
  append into table test    --3、向表test中追加记录
  fields terminated by X'09'  --4、字段终止于X'09',是一个制表符(TAB)
  (id,username,password,sj)   -----定义列对应顺序

其中append为数据装载方式,还有其他选项:
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上

问题:SQLLDR能不能保留表中原有的数据,如果发现KEY重复时,再UPDATE对应的记录?
作者: AAACCC    时间: 2003-9-27 14:20
标题: Re: (原创)小招技巧3: EXCEL文件导入数据库
老大, 我看不懂

最初由 oldwain 发布
[B]嗨! 这个问题你可能有很多好方法.
不过多学一种不是坏事.

你用的方法可能是:
1. 存成txt文件, 再用sql*loader
2. 存成txt文件, 再用第三方工具(如pb, delphi, toad, pl/sql dev等)导入.

sql*loader用起来费劲, 为了小小的需求, 装一个第三方工具麻烦.
看看我的方法.

比如文件中有id, name两列(分别为A列和B列), 要导入的表为person(person_id, person_name)

在excel 文件的sheet的最右列, 添加一列, 对应第一行数据的单元格写入以下内容:

= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"

然后把这一行复制到所有数据行对应的列中.

这一列的内容拷贝出去保存, 即成为可以直接在sql*plus下运行的脚本.


(需要引用, 请注明出处www.itpub.net, by oldwain) [/B]

作者: nicholaz    时间: 2003-9-27 14:38
学习
作者: eaglewood    时间: 2003-9-28 13:22
SQL*XL 在哪里有下载的?怎么使用?
作者: amoyruby    时间: 2003-9-30 09:27
标题: 最简单的办法
在EXCEL文件中写VBA,生成SCRIPT文件。
多快好省量又足
作者: 荷兰豆儿    时间: 2003-9-30 10:46
我用vb写了个从excel中导入oracle,现在在修改其通用性
作者: cragzeng    时间: 2003-10-10 08:32
荷兰豆儿,能给我一份好么
我的Mail是 Crag_Zeng@dlink.com.cn
作者: 黑色火花    时间: 2004-1-28 17:17
最初由 荷兰豆儿 发布
[B]我用vb写了个从excel中导入oracle,现在在修改其通用性 [/B]

急需,給我一份好不!
作者: klby    时间: 2004-3-30 17:50
昏,我一直是另存为dbf文件,然后用data dump倒入的:)
作者: sqlanywhere    时间: 2004-3-30 18:22
最初由 卓玛 发布
[B]EXECL  -->SAVE AS *.CSV(COMMA DELIMITED). THEN LOAD IT DIRECTLY.


CTL FILE EXAMPLE
------------
Load Data
INFILE 'E:\AA.csv'
TRUNCATE
INTO TABLE AA
FIELDS TERMINATED BY ','
(A,
B)
------------ [/B]


这也是我常用的方法
作者: ilovewwz    时间: 2004-4-2 15:27
我一直是用sqllldr,*.ctl,*.dat导入TXT文件的。请教如何用TOAD直接把EXCEL或TXT文本倒入。
作者: meitounao    时间: 2004-4-2 17:23
= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"
老大这句话我复制到最后一列在考出来还是一样呀!是不是我操作不当,应该怎样把A1的值取到,能不能说的在详细些!!困惑!
作者: registra    时间: 2004-4-2 17:28
标题: 建议
其实我觉得最快也是最简单的方法就是使用SQL Sever2000附带的工具(导出导入)
作者: yld    时间: 2004-4-2 19:18
呵呵,我曾经这么做过,笨人的笨办法,但有时确实很有用。呵呵。
作者: sharklove    时间: 2004-5-6 11:36
对,可以先用sqlserver2000导入excel,然后再从sqlserver中导出到oracle
作者: netsucker    时间: 2004-5-9 15:40
execl-->txt-->sql/server DTS-->oracle DB
好用的不得了!
作者: herryju    时间: 2004-5-30 02:04
我觉得还是xml的导入方式才是以后的趋势
作者: d.c.b.a    时间: 2004-5-31 12:14
偶是用自已开发的AnySQL进行导入的。
作者: jxyjj    时间: 2004-8-9 18:29
标题: 谢谢了!
成功了!谢谢大家了!
作者: redhill    时间: 2004-9-13 07:54
up

最初由 WANG2 发布
[B]天哪,你们都不知道 TOAD 这个工具么? [/B]

作者: hotangel    时间: 2004-9-16 23:01
标题: Golden
用golden32上带的ImpExp32进行数据的倒入倒出,很方便,而且效率又高,excel的可以另存为csv文件格式后倒入。一个70列的有96万多行的数据倒入到数据库中用时大约十分钟,感觉很好.
作者: sunsonbaby    时间: 2004-11-2 22:35
天哪,果然是一圈不知道TOAD的家伙啊,在excel对数据进行排序筛选后直接把excel另存为tab-delimited的txt文件,然后利用TOAD的import工具,设置一下文本列和数据库列之间的对应关系,大功告成啊。晕。。。。。。
作者: bestwill    时间: 2004-11-3 08:29
我用PB转存很方便
作者: alonemo    时间: 2004-11-3 09:04
楼上的停水了》》》》》
作者: huajian15    时间: 2004-11-4 15:19
数据少于65536行的话可以用acess连接表,把excel中的数据贴在acess中就行了,简单,方便
作者: jamesbert    时间: 2005-1-17 21:08
非常棒,谢谢
作者: cc59    时间: 2005-4-19 13:15
eygle提供的方法倒是经常用.
作者: mistfrog    时间: 2005-4-19 13:40
可以直接在TOAD里面通过IMPORT导入Excel数据的,但是对中文字符不适用
作者: bleakyu    时间: 2005-4-19 17:58
CSV文件导入数据库 可以这样
其中的CSV文件可以将EXCEL文档另存为用逗号分隔的CSV文件,其中要去掉表头行。

   然后生成一个如下的CONTROL文件,abc.ctl:

      load data
            infile 'c:\abc.csv'
            append into table table_name
            fields terminated by ','
            (field_name1,field_name2)              

其中 (field_name1,field_name2)   为表中的列。

然后在DOS提示符运行以下导入语句:

            d:\sqlldr userid=test/pwd@server control=c:\abc.ctl
作者: breath    时间: 2005-5-10 14:03
标题: 方法实在太多了,工具也多多
加上自己的习惯和实际环境、情况,每个人都能找到合适的方法,不一定哪个最好啦
作者: looric    时间: 2005-5-13 11:54
http://www.itpub.net/showthread.php?threadid=361525
作者: oraclesea    时间: 2005-5-13 12:41
UP
作者: xiaoxiao5162    时间: 2005-5-20 16:07
标题: 怎怎么樣可以連接几個表
各位老大﹐我現在有一個問題解決不了﹐希望你們的幫助???
我有很多表單﹐里面有一些內容是重復的﹐所以每次變動一個人的資料就要把每個表里內容都打開修改﹐請問有什么辦法可以讓我修改一個表﹐所有其它表相同內容都變啊??????

謝謝大家了!!!!!
請回我的EMALE    chenjia8111@hotmail.com
作者: ruili_zeng    时间: 2005-5-22 15:27
方法很多。看你怎麼用了。
作者: jiao88    时间: 2005-6-21 14:27
TO sunsonbaby
可不可以講的具體點啊
我想學習你的方法(用TOAD的import)
作者: zhpsam    时间: 2005-6-21 16:03
用pl/sql devloper直接导!
作者: tdzr    时间: 2005-6-22 11:40
最初由 mistfrog 发布
[B]可以直接在TOAD里面通过IMPORT导入Excel数据的,但是对中文字符不适用 [/B]


其实TOAD导入的时候还是采取逐行插入的方式,而且他还可以选择insert, update, delete等不同的选项,比较灵活。不过数据量大的话,最好还是用sqlldr比较好
作者: huangyuesong    时间: 2005-6-22 13:42
标题: 我每次PL/SQL DEV都直接PASE进去了,很易的,就是要选择好
在表编辑状态,把MOUSE,放到一个PL/SQL编辑格的左下角,这时MOUSE变成一个箭头,按住拖动,然后选择好要CP的字段,再按右键,PASE,如果要是PASE是灰的,就再单元一格,就会变成实的,再重复以下步骤就可以了。
作者: smilingwx    时间: 2005-6-22 14:16
看不懂
作者: hobo2    时间: 2005-6-24 14:40
标题: 自动导入、导出
我要实现自动导入导出,工具是不能用了,大虾们能否提供库程序供调用。
作者: popcorn    时间: 2005-6-24 15:35
大家使用object browser,很方便
作者: xuy_1    时间: 2005-7-13 10:07
标题: 太棒了!谢谢!
成功导入!
作者: yangqingdelphi    时间: 2005-7-13 12:55
不错地说
作者: cnprogfan    时间: 2005-8-31 10:01
标题: 我导入数据的办法
我现在在客户这里经常有一些excel表数据要导入oracle ,我看了看大家写的办法和我的不太一样,现将我的方法步骤告诉大家:
1将excel表的数据导入access库,形成对应的表
2将要导入的oracle目标表,用odbc的方式,链接到access里(以后对此表进行更新)
3在access里做一个追加查询,也就是insert into  xx    select xx from xx  语句,这样由于采用sql语句,想导入哪个字段就可以导入哪个字段,而且速度超快,不容易出错!


-------------------------------------
说明:
第二步用odbc的方式链接oracle表的方法:
1在控制面板-》odbc里建一个oracle库的odbc
2在access里点右键,选择链接表,在类型里选择odbc即可。
作者: dba_mx    时间: 2005-12-22 21:47
最初由 嘟嘟子 发布
[B]

列编辑?? 怎么用?? 没找到这个选项啊?是不是替换?? [/B]


菜单 列/列块模式

ALT + C
作者: dba_mx    时间: 2005-12-22 22:02
标题: 真正的技巧
1、在 Excel 中选中要导入 Oracle 的数据

2、在 PL/SQL Dev 中以编辑状态打开目标数据表

3、在 字段栏按住左键,光标变成下箭头,拖动,选中与Excel中选择的列一致的字段个数

4、右键-粘贴 (也可以直接 CTRL + V)

反之也可以从 Oracle 中直接把数据复制到 Excel 中
作者: is乞力马扎罗    时间: 2006-2-23 20:51
最初由 bleakyu 发布
[B]CSV文件导入数据库 可以这样
其中的CSV文件可以将EXCEL文档另存为用逗号分隔的CSV文件,其中要去掉表头行。

   然后生成一个如下的CONTROL文件,abc.ctl:

      load data
            infile 'c:\abc.csv'
            append into table table_name
            fields terminated by ','
            (field_name1,field_name2)              

其中 (field_name1,field_name2)   为表中的列。

然后在DOS提示符运行以下导入语句:

            d:\sqlldr userid=test/pwd@server control=c:\abc.ctl [/B]


这位兄台在不在?
我按你说的方法做了以后,数据并没有导进去啊,就是生成了一个相应的后缀为.bad的文件,请教还应该怎么做啊?谢谢!!
作者: outdo    时间: 2006-2-24 08:51
最初由 is乞力马扎罗 发布
[B]

这位兄台在不在?
我按你说的方法做了以后,数据并没有导进去啊,就是生成了一个相应的后缀为.bad的文件,请教还应该怎么做啊?谢谢!! [/B]


你指定 控制文件目录可对?
把你bad文件考几行出来看看
作者: 乞力马扎罗    时间: 2006-2-24 15:34
控制文件的目录是对的,我就直接放在d盘下了,.bad里面的前几行是这样的

YJ,423,1400,662,642,13,132,0
JY,119,1400,503,752,28,182,0
TT,866,1400,336,28,0,308,2
作者: mfox99355    时间: 2006-3-31 23:00
Very Good.
Thanks for sharing.
作者: hatala    时间: 2007-4-30 10:54
pl/sql 导入还不错

呵呵
作者: 九曲弯弯剑    时间: 2007-5-1 22:03
up
作者: feng2371    时间: 2008-1-10 20:02
不太明白
作者: lall    时间: 2008-1-10 23:28
还是觉得PLSQL方便
作者: jack198409    时间: 2008-1-11 08:14
是的
PL/SQL DEVELOPER 導入簡單!
作者: eworm    时间: 2008-1-11 23:45
有没有用xml导入的?
作者: netscanner    时间: 2008-3-17 22:47
试了方法二,很不错啊~~~
作者: jvkojvko    时间: 2008-3-18 09:16
一直使用的方法是PLSQL -> ...FOR UPDATE -〉PASTE
作者: sunseven    时间: 2008-3-18 09:42
标题: text importer
用sql窗口编辑方法当然可以,但是pl/sql本身提供了text importer的倒入方法。
功能比较多一些。pb倒入也可以不过要用到小技巧,要开两个窗口,同时增删主键。
耗时都差不多。具体将excel转成文本的话,不存在什么麻烦,及时复制粘贴罢了
作者: keyneszhanghui    时间: 2008-3-18 10:04
用oracle sql developer导入吧,好用!
作者: 书剑浪子    时间: 2008-9-10 11:44
学习了呵。。。
作者: cantyming    时间: 2008-9-10 15:04
呵呵 学习...
作者: jason_tu    时间: 2008-9-10 16:30
原帖由 oldwain 于 2003-3-11 11:02 发表
嗨! 这个问题你可能有很多好方法.
不过多学一种不是坏事.

你用的方法可能是:
1. 存成txt文件, 再用sql*loader
2. 存成txt文件, 再用第三方工具(如pb, delphi, toad, pl/sql dev等)导入.

sql*loader用起来费劲, 为了小小的需求, 装一个第三方工具麻烦.
看看我的方法.

比如文件中有id, name两列(分别为A列和B列), 要导入的表为person(person_id, person_name)

在excel 文件的sheet的最右列, 添加一列, 对应第一行数据的单元格写入以下内容:

= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"

然后把这一行复制到所有数据行对应的列中.

这一列的内容拷贝出去保存, 即成为可以直接在sql*plus下运行的脚本.


(需要引用, 请注明出处www.itpub.net, by oldwain)


作者: anglei    时间: 2008-9-10 16:33
我怎么实验不好啊?
作者: csbwolf10    时间: 2010-3-31 19:30
学习中,我目前正遇到这个问题,等解决了贴出来给大家看看。
作者: chx3515    时间: 2010-3-31 20:26
强,学习了!!!
作者: 凝结水晶    时间: 2010-11-9 22:29
大家试试excel的函数CONCATENATE。
很方便!
例如:
=CONCATENATE("insert into test values('",E335,F335,G335,"','",D335,"',lower('",A335,"'),sysdate,'",J335,"');")

",E335,F335,G335," 这里的逗号代表连接组合成数据库的一列。
作者: zhuanke    时间: 2012-2-4 21:11
凝结水晶 发表于 2010-11-9 22:29
大家试试excel的函数CONCATENATE。
很方便!
例如:

你好,请问excel中有一列为日期,怎么能正确获取到呢
作者: jimn1982    时间: 2012-2-4 21:17
不知道oracle提供的UTL_FILE包是否可以操作excel文件
作者: 天狼1980    时间: 2012-2-5 09:07
好东西要顶




欢迎光临 ITPUB论坛-专业的IT技术社区 (http://www.itpub.net/) Powered by Discuz! X3.2