自动生成sqlloader的控制文件

sqlloader 运行过程需要控制文件,一下sql 脚本实现了自动生成控制文件

脚本如下(假如命名为ctl.sql):

set echo off
set heading off
set verify off
set feedback off
set show off
set trim off
set pages 0
set concat on
set lines 300
set trimspool on
set trimout on
spool &1..ctl
select 'OPTIONS (DIRECT=true)'||chr (10)||
       'LOAD DATA'||chr (10)||
       'INFILE '''||lower (table_name)||'.dat'''||chr (10)||
       '&2 INTO TABLE '||table_name||chr (10)||
       'FIELDS TERMINATED BY '','''||chr (10)||
       'TRAILING NULLCOLS'||chr (10)||'('
from  all_tables
where table_name = upper ('&1');
select decode (rownum, 1, '   ', ' , ')||
       rpad (column_name, 33, ' ')||
       decode (data_type, 'VARCHAR2', 'CHAR NULLIF ('||column_name||'=BLANKS)',
               'FLOAT', 'DECIMAL EXTERNAL NULLIF('||column_name||'=BLANKS)','NUMBER',
       decode (data_precision, 0, 'INTEGER EXTERNAL NULLIF ('||column_name||'=BLANKS)',
       decode (data_scale, 0,'INTEGER EXTERNAL NULLIF ('||column_name||'=BLANKS)', 'DECIMAL EXTERNAL NULLIF ('||column_name||'=BLANKS)')),
               'DATE','DATE "YYYY-MM-DD HH24:MI:SS"  NULLIF ('||column_name||'=BLANKS)', null)
from user_tab_columns
where table_name=upper('&1')
order by column_id;
select ')'
from sys.dual;
spool off

然后你就登陆到数据库中执行该sql 脚本 需要给两个参数第一就是 表名 第二就是 模式 (比如 insert, append, replace, truncate)

SQL> start ctl.sql qq APPEND
LOAD DATA
INFILE 'qq.dat'
APPEND INTO TABLE QQ
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(

   ID                   INTEGER EXTERNAL NULLIF (ID=BLANKS)
 , QQ_NUMBER                CHAR NULLIF (QQ_NUMBER=BLANKS)
 , QQ_STATUS                CHAR NULLIF (QQ_STATUS=BLANKS)
 , QQ_NAME              CHAR NULLIF (QQ_NAME=BLANKS)
 , QQ_AGE               INTEGER EXTERNAL NULLIF (QQ_AGE=BLANKS)
 , QQ_EMAIL             CHAR NULLIF (QQ_EMAIL=BLANKS)
 , QQ_ZONE              CHAR NULLIF (QQ_ZONE=BLANKS)
 , IS_VIP               CHAR NULLIF (IS_VIP=BLANKS)
 , ADDRESS              CHAR NULLIF (ADDRESS=BLANKS)
 , REGISTER_DATE            DATE "YYYY-MM-DD HH24:MI:SS"  NULLIF (REGISTER_DATE=BLANKS)
 , LAST_LOGIN_TIME          DATE "YYYY-MM-DD HH24:MI:SS"  NULLIF (LAST_LOGIN_TIME=BLANKS)
 , LAST_LOGIN_ADDR          CHAR NULLIF (LAST_LOGIN_ADDR=BLANKS)
 , LAST_LOGIN_TERMINAL          CHAR NULLIF (LAST_LOGIN_TERMINAL=BLANKS)
)

运行完毕之后就会在当前路径下面生成了控制文件,可以直接拿去用了

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值