Excel Macro - SQL*Loader helper

        关键字:oracle import export csv fixed-length sql*loader control file

        Revisions:2011-06-15 24:00 追加更新功能3。

 

        最近某Member担当了Sybase导出为CSV导入Oracle的Ticket,纠结于CSV导入到Oracle时的数据格式化,以及手写CTL文件出现的五花八门的错误。于是,我给其弄了一个Excel Macro的小工具:SQL*Loader Helper。
        目前SQL*Loader Helper主要有3个功能,其一:生成Oracle Table导出CSV的SQL文件,其二:生成CSV导入Oracle Table的CTL控制文件,其三:生成Fixed-Length记录文件导入Oracle Table的CTL控制文件。
        如下图sample Sheet例子:

按下<Make Export-CSV SQL>按钮,生成的emp_out.sql文件长这样:

set heading off
set feedback off
set trimspool on
set termout off
set echo off
set pages 0
set line 9999
spool c:\emp.csv
select 'EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO' from dual;
select
EMPNO ||','||
ENAME ||','||
JOB ||','||
MGR ||','||
TO_CHAR(HIREDATE,'YYYY/MM/DD HH24:MI:SS') ||','||
SAL ||','||
COMM ||','||
DEPTNO
from EMP
order by EMPNO;
spool off

执行sqlplus scott/tiger @ emp_out.sql就可以拿到emp.csv。

 

按下<Make CSV-IN CTL File>按钮,生成的emp_in.ctl文件长这样:

OPTIONS(SKIP=1,LOAD=-1,ERRORS=-1,ROWS=2)
LOAD DATA
INFILE 'c:\emp.csv'
BADFILE 'c:\emp.bad'
TRUNCATE
INTO TABLE EMP
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
EMPNO,
ENAME,
JOB,
MGR,
HIREDATE "TO_DATE(:HIREDATE,'YYYY/MM/DD HH24:MI:SS')",
SAL,
COMM,
DEPTNO
)

 执行sqlldr scott/tiger control=emp_in.ctl就可以导入CSV为Table Records。

 

按下<Make DATA-IN CTL File(Fixed-Length)>按钮,生成的emp_fix_in.ctl文件长这样:

OPTIONS(ERRORS=-1,ROWS=-1)
LOAD DATA
INFILE 'c:\emp.txt'
BADFILE 'c:\emp.bad'
APPEND
INTO TABLE EMP
TRAILING NULLCOLS
(
EMPNO POSITION( 1 : 4 ) DECIMAL EXTERNAL,
ENAME POSITION( 5 : 14 ) CHAR,
JOB POSITION( 15 : 23 ) CHAR,
MGR POSITION( 24 : 27 ) DECIMAL EXTERNAL,
HIREDATE POSITION( 28 : 35 ) DATE "YYYYMMDD",
SAL POSITION( 36 : 42 ) ZONED(7,2),
COMM POSITION( 43 : 49 ) CHAR "decode(:COMM,'',null,to_number(:COMM))",
DEPTNO POSITION( 50 : 51 ) DECIMAL EXTERNAL
)

测试用emp.txt长这样:

 

9001TEST1     JOB1     2011061524001234567       30
9002TEST2     JOB2     2011061524001234567    12330

 执行sqlldr scott/tiger control=emp_fix_in.ctl就可以导入emp.txt为Table Records。

 

以上Windows XP + Oracle 9.2.0.1.0 实验通过。

 

好吧,罗嗦了。readme Sheet里面有详尽的Chinglish解释。

 

SQL*Loader Helper附件已删除,想要的请留下email。

 

个人翻译整理测试成文,主要参考:

Oracleメモ(Hishidama's Oracle Memo)

SQL*Loader Field List Reference

 

※转载请Mail:Nanigac.Yin#Gmail.COM,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" #include "stdio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN Variables */ QueueHandle_t xQueue; #define dui_len 5 #define content_len 10 /* USER CODE END Variables */ osThreadId defaultTaskHandle; osThreadId myTask02Handle; osThreadId myTask03Handle; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ /* USER CODE END FunctionPrototypes */ void StartDefaultTask(void const * argument); void StartTask02(void const * argument); void StartTask03(void const * argument); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ /* GetIdleTaskMemory prototype (linked to static allocation support) */ void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ); /* USER CODE BEGIN GET_IDLE_TASK_MEMORY */ static StaticTask_t xIdleTaskTCBBuffer; static StackType_t xIdleStack[configMINIMAL_STACK_SIZE]; void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) { *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer; *ppxIdleTaskStackBuffer = &xIdleStack[0]; *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;请写出详细的注释
最新发布
06-01

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值