欢迎投稿

今日深度:

Oracle如何编写一个sqlldr实例,

Oracle如何编写一个sqlldr实例,


目录
  • 准备工作
  • 具体步骤
    • 1、整理要导入数据,去除列名另存为csv文件
    • 2、在Oracle上创建存放数据的Table
    • 3、创建ctl文件
      • 1.在sqlldr里创建一个新的文本文件
      • 2.编辑信息如下
      • 3.将文本文件另存为 sn_orderitem_20210412.ctl
    • 4、编写Windows批处理文件
      • 1.在sqlldr里创建一个新的文本文件
      • 2.编辑信息如下
    • 5、双击运行Windows批处理文件
      • 6、查询结果

      准备工作

      首先在D盘创建文件夹,命名为sqlldr

      具体步骤

      1、整理要导入数据,去除列名另存为csv文件

      特别注意:csv文件是纯文本文件,一般以逗号分隔,如果导入的数据中存在逗号,可以给表格中的数据加上双引号将数据括起来。

      数据内容:

      sn_orderitem_20210412

      idorder_iditem_iditem_namepriceitem_num
      AB001A0011001A0.151
      AB002A0011002B201
      AB003A0011003C402
      AB004A0051001A0.151
      AB005A0051004D2006
      AB0015A0151005E40.51
      AB0016A0191006F501
      AB0017A0191007G24.52
      AB0018A0201008H10.31
      AB0001A,B

      结果:

      给表格数据加上引号:!"@!"

      标将数据另存为CSV UTF-8(Comma delimited)格式,存入sqlldr文件夹

      2、在Oracle上创建存放数据的Table

      create table sn_orderitem_20210412(
      id        varchar(20), 
      order_id  varchar(20), 
      item_id   varchar(20), 
      item_name varchar(20),
      price     number,
      item_num  number);

      3、创建ctl文件

      1.在sqlldr里创建一个新的文本文件

      2.编辑信息如下

      load   data
      characterset UTF8
      infile   'D:\sqlldr\sn_orderitem_20210412.csv'
      append   into   table   sn.sn_orderitem_20210412
      fields terminated by ','
      trailing nullcols
      (id OPTIONALLY ENCLOSED BY '"'
      ,order_id OPTIONALLY ENCLOSED BY '"'
      ,item_id OPTIONALLY ENCLOSED BY '"'
      ,item_name OPTIONALLY ENCLOSED BY '"'
      ,price OPTIONALLY ENCLOSED BY '"'
      ,item_num OPTIONALLY ENCLOSED BY '"'
       )

      3.将文本文件另存为 sn_orderitem_20210412.ctl

      解析:

      load   data                                    --控制文件标识
      characterset UTF8                      --设置编码格式,防止中文乱码

      infile   'XXX.csv'                           --即将导入的csv文件及路径
      append  into  table   XXX            --Oracle上创建的表,在原表进行追加数据
      fields terminated by ','                --以逗号分隔 (分隔方式可以是空格,制表符X'09'……)
      trailing nullcols                           --允许某地为空值,保证缺少部分字段时,整个表格不错位
      (XX optionally enclosed by '"'    --每个字段都是用“”包围(当文本里的字符和分隔符有冲突是可以使用)
      ……
       )

      拓展:

      导入数据共有四种方式:

      • insert:为缺省方式,在数据装载开始时要求表为空;
      • append:在表中追加新记录;
      • replace:删除旧记录,替换成新装载的记录;
      • truncate:删除旧记录(用 truncate table 语句),替换成新装载的记录。

      4、编写Windows批处理文件

      1.在sqlldr里创建一个新的文本文件

      2.编辑信息如下

      D:\app\isadmin\product\11.2.0\dbhome_1\BIN\SQLLDR.EXE userid=test/test@local11g control=D:\sqlldr\sn_orderitem_20210412.ctl log=D:\sqlldr\sn_orderitem_20210412.log bad=D:\sqlldr\sn_orderitem_20210412.bad  SILENT=(HEADER,FEEDBACK) errors=0

      3.将文本文件另存为 sn_orderitem_20210412.bat

      解析:

      D:\app\isadmin\product\11.2.0\dbhome_1\bin\sqlldr.exe   --sqlldr工具调用

      userid=test/test@local11g                                     --用户名/密码@库名

      control=D:\sqlldr\sn_orderitem_20210412.ctl        --控制文件绝对路径

      log=D:\sqlldr\sn_orderitem_20210412.log             --指定日志文件路径

      bad=D:\sqlldr\sn_orderitem_20210412.bad           --指定错误文件路径

      silent=(header,feedback)                                       --隐藏数据载入过程中的提示信息

      errors=0                                                                   --允许错误行数为0

      5、双击运行Windows批处理文件

      6、查询结果

      导入Oracle里的数据会带上双引号,回去看了一下csv文件发现,从excel里加引号后导出csv文件后,双引号会变为三引号,故造成此结果,我的方法直接在txt文件中将三引号替换为双引号后再导入,如果有其它方法的小伙伴可以评论区交流~当然如果你的数据里没有出现逗号,可以不需要用引号来分隔,因此也不会出现这样的问题啦
      除了转化为csv,也可以用txt文件进行导入,只需要将excel转化为以制表符分隔的txt文本就可以了创建.bat Windows批处理文件的便利之处是可以重复使用,只需修改控制文件中需要变动的参数后再次运行就可以了,也可以进行批量导入

      到此这篇关于Oracle如何编写一个sqlldr实例的文章就介绍到这了,更多相关Oracle编写sqlldr内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

      您可能感兴趣的文章:
      • Oracle sqlldr导入一个日期列实例详解
      • Oracle批量导入文本文件快速的方法(sqlldr实现)
      • sqlldr装载数据实现代码

      www.htsjk.Com true http://www.htsjk.com/oracle/46712.html NewsArticle Oracle如何编写一个sqlldr实例, 目录 准备工作 具体步骤 1、整理要导入数据,去除列名另存为csv文件 2、在Oracle上创建存放数据的Table 3、创建ctl文件 1.在sqlldr里创建一个新的文本文件...
      评论暂时关闭