【在线请教】如何通过pl/sql简单实现把excel表数据批量导入Oracle中已创建的表?
如果我想把一批excel表中数据批量插入Oracle数据库中,不知如下方法可行?1,先在Oracle库中创建对应excel列字段的空数据表tab;
2、然后把excel数据批量导入已创建的空表tab中;
3、再然后用insert into 表 select 列1,列2,列3 from tab命令批量插入数据,完成任务;   请教各位高手,不知道这种发放可行吗???还有就是关键第2部,如何把excel表中的数据批量导入在Oracle中已创建的tab中呢???

解决方案 »

  1.   

    不需要建空表,使用sqlloader直接导入目标表。sqlloader的用法google下,有很多,讲的很详细。
      

  2.   

    把execel数据转成CSV格式(利用execel的另存为那个功能另存为CSV格式),然后利用sqlldr把数据导入到你相应的表中使用sqlldr的时候,是要先建好表结构的,然后建一个控制文件,再在command下执行sqlldr就可以了
      

  3.   

    我晕·Excel不是连接的函数吗?直接做成一列为insert 的插入语句就可以啦!如果你想用程序写·那你就先利用ODBC查询Excel然后利用JDBC插入(JAVA)。
      

  4.   

    还有种方法:         EXCEL数据表转化另存为txt,然后直接用PB菜单ROW中的import工具直接导入到目标表中即可!!!
      

  5.   


    前几天搞了下将excel表导入oracle数据库的问题,连查带问带自己摸索,将自己弄过的方法写出来和大家交流。这些方法也可以用于将其它格式的数据导入到oracle中,这里只是以excel为例。我的oracle是9i。   
      方法一,使用SQL*Loader   
      这个是用的较多的方法,前提必须oracle数据中目的表已经存在。   
      大体步骤如下:   
      1   将excle文件另存为一个新文件比如文件名为text.txt,文件类型选文本文件(制表符分隔),这里选择类型为csv(逗号分隔)也行,但是在写后面的control.ctl时要将字段终止符改为','(fields   terminated   by   ','),假设保存到c盘根目录。   
      2   如果没有存在的表结构,则创建,假设表为test,有两列为dm,ms。   
      3   用记事本创建SQL*Loader控制文件,网上说的文件名后缀为ctl,其实我自己发现就用txt后缀也行。比如命名为control.ctl,内容如下:(--后面的为注释,实际不需要)   
        
        load   data               --控制文件标识   
        infile   'c:\text.txt'       --要输入的数据文件名为test.txt   
        append   into   table   test    --向表test中追加记录   
        fields   terminated   by   X'09'  --字段终止于X'09',是一个制表符(TAB)   
        (dm,ms)                                       --定义列对应顺序   
      备注:数据导入的方式上例中用的append,有一下几种:insert,为缺省方式,在数据装载开始时要求表为空;append,在表中追加新记录;replace,删除旧记录,替换成新装载的记录   
      ;truncate,同replace。   
      4   在命令行提示符下使用SQL*Loader命令实现数据的输入   
        
      sqlldr   userid=system/manager   control='c:\control.ctl'   
        
      更详细的介绍请查看http://www-rohan.sdsu.edu/doc/oracle/server803/A54652_01/ch04.htm#793   
        
      方法二   利用PLSQL   Developer   
      使用PLSQL   Developer工具,这个可是大名鼎鼎的Oracle   DBA最常使用的工具。   
      在单个文件不大的情况下(少于100000行),并且目的表结构已经存在的情况下——对于excel而言肯定不会超过了,因为excel文件的最大行为65536——   可以全选数据复制,然后用PLSQL   Developer工具。   
      1   在PLSQL   Developer的sql   window里输入select   *   from   test   for   update;   
      2   按F8执行   
      3   打开锁,   再按一下加号.   鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。   
      方法三   使用其它数据转移工具作中转站。   
      我使用的是Sql   Server   2000。   
      先将excel表导入sqlserver数据库中,然后再从sql   server导入到oracle中。这两部操作都简单,如果不会随便查个帮助就可以了,要不然问我也行:)   
      这里有两个自己的经验:一是注意excel文件的版本和格式要与导入到sql   server时的数据源匹配。如果导入到sql   server时的数据源选Microsoft   Excel   97-2000的话,而excel文件的版本为Micaosoft   Excel   5.0/95   工作簿,则有可能出问题。关于如何看Excle文件格式,你打开excel文件,选择另存为,即可看到像Micaosoft   Excel   5.0/95   工作簿或者是Microsoft   Office   Excle   工作簿等等其它的保存类型。   
      二就是由sql   server导入到oracle中时,记得将在oracle中的表名全部用大写。这条经验是花了好些时间才换来的。我刚开始导时,由于由excle导入sql   server的表名为小写,然后倒到oracle中默认的也是小写,结果出现了一些很奇怪的情况,一个就是在Enterprise   Manager   Console中,在所有表的列表里面可以看到倒入的表,并且利用表数据编辑器还可以看到导入好的数据,但是在具体的表空间下确连表也看不到,实在是奇怪,我老是在想那表到底跑哪去了;二就是不管在具体表空间下看不看得到,表数据总是可以看到的,但是在Sql*Plus或者利用PLSQL   Developer的Sql   Window,写select语句查看数据,总是提示错误:Ora-00942:表或视图不存在。这个问题开始困扰了我好久,后来还是灵机一动,抱着试一试的心理在由sql   server导入oracle时将表名改为全部大写(部分大写都不行),导入后不论Sql*Plus或者PLSQL   Developer的Sql   Window里写select语句(里面的表名用大写或者小写都行),都能正确的取出记录。很奇怪的问题,作为经验,如果哪位大侠有高见,请不吝赐教。   
        
      http://www.jkflyfox.blogchina.com/2334307.html
      

  6.   

    几种方法   
      1、最实用的方法   
          a、将excle转化为标准的txt文件   
          b、使用随Golden安装后伴随的工具ImpExp32,在http://www.benthicsoftware.com可以下载到。   
      2、使用pb   ,也是以txt为基础的   
       a、建一张空表,然后打开它。   
       b、依次选取rows->import,选取你生成的文本文件,确定即可。   
          c、pb比较挑剔,多实践几次。   
      3、使用delphi等开工具写一个对excel读取的软件,然后插入表中,不过难度较大。
      

  7.   

    用sqlloader:   
      1、打开MicroSoft   Excel   2000   
        
      2、文件(F)→新建(N)→工作簿→   
        
      3、输入以下数据,存盘为test.xls,如图:   
        
              
        
      4、文件(F)→另存为(A)→   
        
            保存类型为:制表符分隔,起名为text.txt,保存到C:\   
        
              
        
      5、连入SQL*Plus   
            以system/manager用户登录,   
            SQL>   conn   system/manager   
        
            创建表结构   
            SQL>   create   table   test   
          (   
          id       number,        --序号   
          username    varchar2(10),     --用户名   
          password    varchar2(10),     --密码   
          sj       varchar2(20)        --建立日期   
          );   
        
      6、创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑:   
            控制文件: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)     -----定义列对应顺序   
        
      a、insert,为缺省方式,在数据装载开始时要求表为空   
      b、append,在表中追加新记录   
      c、replace,删除旧记录,替换成新装载的记录   
      d、truncate,同上   
        
      7、在DOS窗口下使用SQL*Loader命令实现数据的输入   
        
      C:\>sqlldr   userid=system/manager   control=input.ctl   
        
              
        
        默认日志文件名为:input.log   
        默认坏记录文件为:input.bad   
        
      8、连接到SQL*Plus中,查看是否成功输入   
     PL/SQL   Developer   
        
      拷贝,粘帖
      

  8.   

    引用 13 楼 duqiangcise 的回复:
    有哪位大侠知道使用sqlldr时,控制文件是放在数据库服务器上,还是放在本地服务器上? 
    本地 我这又个脚本 
    cmd 执行 
    sqlldr userid=name/passwd control=E:\\result.ctl 控制文件result.ctl为: 
    load data 
    infile 'E:\sql.txt' 
    append 
    into table Test 
    fields  terminated  by  "," 
    (x ,y ,z ) 
    sql.txt为要加载的数据 
    1,2,3 
    4,5,6 
    7,8,8
      

  9.   



    关键是不知道PL/SQL中的TXT_IMPORT这个文本导入如何具体使用???还要写过程PRC脚本加载批量导入万条数据吗???
      

  10.   

    O(∩_∩)O哈哈~  我是.net菜鸟   方法是先将exl导入内存中的表,然后从内存导入数据库.....
      

  11.   

    用Ora与xls互转工具  oraxcel
      

  12.   

    如果数量不多,就用PL/SQL 自带的工具就可以了:
    工具--ODBC导入器
    用户/系统 DSN:选“EXCEL FILES”
    点连接,选则EXCEL 文件
    转到“到ORACLE的数据"
    选择表。选择对应字段就可以了。
      

  13.   


    plsql中的txt import文本导入工具如何使用???对文本文件的格式具体是如何要求书写的???请plsql高手指点一二、、
      

  14.   

    应该对大家DBA来说,是很实用开;
      

  15.   

    日常工作中往往涉及到数据导入工作,平时办公中excel应用十分广泛,导入工作我们一般都是将excel内容复制到文本文件中然后利用sqlldr工具导入。较新版本的Sql Developer提供了直接excel导入到表的功能,下面我们来尝试一下:
    需要导入的excel的数据如下:
    辅导书在Oracle数据库中建立实验所需要的表:凤飞飞其中t1为主键;
    点中创建好的表右键选择导入数据,选择需要导入的excel文件(目前仅支持xls格式不支持xlsx格式):1231若表格中有列名,则钩上”标题?”选项:2222单击下一步,选择需要的列:3333选择完成后单击下一步,将源数据列与目标表列一一对应:vvv单击下一步,选择导入前验证导入参数,出现以下条目:
    验证表名 SUCCESS
    验证源列是否映射了目标列 SUCCESS
    验证源列是否定义了数据类型 SUCCESS
    验证列的大小字段 SUCCESS
    针对列大小检查数据 SUCCESS
    验证日期列是否具有日期格式 SUCCESS
    验证是否支持这些数据类型的导入 SUCCESS
    单击完成,消息窗口出现导入日志:bbbb注意到这一步为止仍没有commit,需要到相关窗口点下commit按钮:nnnn目前Sql Developer中的excel导入功能已经较为完善,在版本1.5.5之前普遍存在next按钮无反应的bug。转载请注明源地址: http://www.youyus.com
      

  16.   

    最简单的办就是复制+粘贴
    1) 执行select * from yourtable for update
    2)按下编辑锁
    3)从excel中copy数据(从Excel中copy数据时,最前面要多拷一空列)
    4)到PL/SQL中查询结果的最后带*号的行上粘贴
    5)再点编辑锁右边的“对钩”,再F10提交
      

  17.   

    方法一:excel本身就可以连接数据库,提供一些数据库操作
    方法二:把excel导出csv格式,各种数据库都提供对csv格式文件的读取
      

  18.   

    WuBill说的对,我就是这么导的
      

  19.   

    谢谢大家提供的方法,十分有用,我觉得还是用pl sql 来导入excel表比较方便了,不论粘贴还是在窗口执行语句导入,都是很简便的,不过用sqldr 也不错!多谢!!