我想用sqlloader命令把D盘下面的文本文件导入Oracle数据库中对应表里。因文本文件很大
1。在导入之前先清除数据库的对应表
2。去掉左右两边的空格
3。用“|”分格
文本的格式是这样的。123|345|897| |234|675请问各位高手怎么写这个脚本?

解决方案 »

  1.   


    --将字符串两端的空格去掉
    SQL> select trim(' ' from ' adfd dfdfe  ') chr from dual;
     
    CHR
    ----------
    adfd dfdfe
      

  2.   


    SQL> create table t
      2  as
      3  select 111 id,'asdfadf' nm from dual union all
      4  select 232,'ddddd' from dual union all
      5  select 333,'eeeee' from dual
      6  /
     
    Table created
     
    SQL> select * from t
      2  /
     
            ID NM
    ---------- -------
           111 asdfadf
           232 ddddd
           333 eeeee
     
    SQL> truncate table t;--清除表中数据
     
    Table truncated
     
    SQL> select count(*) from t;
     
      COUNT(*)
    ----------
             0
      

  3.   

    直接sqlldr或者external table就可以实现了。
    先建立一个控制文件,
    load data
    infile 'file_location'
    truncate into table table_name
    fields terminated by '|'
    trailing nullcols
    (
    co11 "trim(:col1)",
    col2 "trim(:col2)",
    col3 "trim(:col3)",
    ...
    )
    然后使用sqlldr导入,你的文件比较大,设置为direct方式加载,中间readsize,bindsize,streamsize几个参数可以设置大一些。
    自己慢慢琢磨吧
      

  4.   

    1、先建立一个控制文件,文件名如: data.ctl
    load data
    infile '要导入数据文件'
    truncate into table 表名
    fields terminated by '|'
    trailing nullcols
    (
    co11 "trim(:col1)",
    col2 "trim(:col2)",
    col3 "trim(:col3)",
    ...
    )2、使用sqlldr在命令行导入,如:
    C:\>sqlldr 用户名/密码@连接串 control=data.ctl direct=true streamsize=10485760说明:如果不需要去空格,则直接在控制文件中写出列名就行了。
      

  5.   

    导入后再update吧,
    不能动态