三. sqlldr初接触

来源:互联网 发布:诊股最准的软件 编辑:程序博客网 时间:2024/04/29 11:57
 

只记录一些学习时看到和自己用到的sqlldr 控制文件内命令

 

定长字符串处理
into table A
( col1 position(1:5),            --第1到第5,5个字符
  col2 position(*+1,7),          --第6(5+1,*表示上一个结束的位置,+1为偏移量)到第7,2个字符
  ...
)

字符串处理命令
 举例
  ...
  into table A
  (
     A position(1:10),
     B "substr(:A,1,2)"
   )
这里""内可以加各种字符串处理命令 substr replace 什么的。转意字符和C里的一样是/

跳过指定列 filler关键字
 举例
  ...
  into table A
  (col1 filler,B,C)   --这里的col1视为一个变量名,在控制文件中其他地方可以使用

分隔符 fields terminated by "," optionally enclosed by '"' 后半句是说""内的 ,就当数据处理了
  举例:  xx.dat 内容是 a,b,c,b
                        e,f,g,h
      load data
      infile xx.dat
      into table A
      fields terminated by ","    --这句我在自己用的时候一直都要直接跟着(COL1,COL2,COL3,COL4)这样的,不跟就会报错>.< 还要再看看..或者谁能告诉我
      ...
跳过指定行 skip 配合load用
  举例 sqlldr control=xxx.ctl skip=1 load=10   --导入2-11行 不指定load就是导入到数据文件结束

条件 when,这里要注意的是多个条件 只支持and 不支持or
  举例:
  ...
  into table a
    when col='A'
    (col filler position(1:2),
     col2 position(4:6),
     ...
    )
  into table b
    when col='B'
    (col filler position(1:2),
     col2 position(4:9),
     ...
    )
  这个例子里when分支语句和filler跳过的数据作为变量都有了~
  但是奇怪的是,当用
    into table a
    when col='A'
    fields terminated by ","
    (col filler,
     col2,
     ...
    )
    into table b
    when col='B'
    fields terminated by ","
    (col filler position(1:2),
     col2 position(4:9),
     ...
    )
    这种以逗号分隔的数据进行插入时,放在第二个分句上的表就死活都插入不进去了...谁来告诉我这个菜鸟一下呢...

INFILE属性
fix
infile xxxx.dat "fix n" 无论文件怎么回车换行,固定视为n个字符一行 固定长度字符文件用
var
infile xxxx.dat "var n" 行首指定长度,n默认5,小于40,在数据文件中,每行用前n个字符表示当前行长度
----------以上两种都不常用
str
infile xxxx.dat "str 'x\n'" 在数据文件中每行结束以 x 字符作为标记,执行时将其替换为\n 这个x可以是一般字符,也可以为2进制表示,如X''

可以提高导入速度的参数
rows(默认64)
bindsize(默认256k,影响rows可设置的最大值)
direct(设为true可以提高速度,查了一下好像是说可以不通过select语句,直接导入什么的..好吧实际上是我在哪里看了一眼然后想回去找又找不到了..但是在有唯一索引时慎用

 

原创粉丝点击