需求:從sqlserver中把2008-01-01到2009-12-31的憑證頭表的數據導入到oracle數據庫中
實現步驟:
1、登錄進入SQL Server Management Studio,選擇要導出的數據庫,新建查詢分析窗口
2、執行如下命令:
EXEC master..xp_cmdshell 'bcp "SELECT * from 數據庫名.dbo.t_gl_voucher where fbizdate>=''2008-01-01'' and fbizdate<=''2009-12-31''"queryout c:\voucherData_09.txt -c -U"sa" -P"sa的密碼"';
輸出數據文件c:\voucherData.txt,這是一個僅包含文本數據且列以tab鍵分隔的數據文件
如果輸出整個表的數據更簡單,具體查看bcp命令幫助
注意:如果存儲過程xp_cmdshell無法使用,請先執行以下存儲過程:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
3、做一個oracle導入用的控制文件(文本格式),名稱爲voucher.ctl,內容如下:
load data --1、控制文件標識
infile 'c:\voucherData_09.txt ' --2、要輸入的數據文件名
append into table CG_T_GL_Voucher_09 --3、向憑證表中追加記錄
fields terminated by X'09' --4、字段終止於X '09 ',是一個製表符(TAB)
TRAILING NULLCOLS --5、去掉空記錄
(FID,
FNUMBER,
FBIZDATE "TO_DATE(SUBSTR(TO_CHAR(:FBIZDATE),1,19),'yyyy-mm-dd hh24:mi:ss')",
FCREATORID,
FCREATETIME "TO_DATE(SUBSTR(TO_CHAR(:FCREATETIME),1,19),'yyyy-mm-dd hh24:mi:ss')",
FLASTUPDATEUSERID,
FLASTUPDATETIME "TO_DATE(SUBSTR(TO_CHAR(:FLASTUPDATETIME),1,19),'yyyy-mm-dd hh24:mi:ss')",
FHANDLERID,
FDESCRIPTION,
FHASEFFECTED,
FAUDITORID,
FSOURCEBILLID,
FSOURCEFUNCTION,
FCOMPANYID,
FPERIODID,
FVOUCHERTYPEID,
FCASHIERID,
FPOSTERID,
FCANCELLERID,
FSOURCESYS,
FSOURCETYPE,
FBOOKEDDATE "TO_DATE(SUBSTR(TO_CHAR(:FBOOKEDDATE),1,19),'yyyy-mm-dd hh24:mi:ss')",
FCASHFLOWFLAG,
FISREVERSEVOUCHER,
FATTACHMENTS,
FENTRYCOUNT,
FLOCALDEBITAMOUNT,
FLOCALCREDITAMOUNT,
FREPORTINGDEBITAMOUNT,
FREPORTINGCREDITAMOUNT,
FBIZSTATUS,
FCURRENCYID,
FHASREVERSED,
FBGSTATUS,
FHASCASHACCOUNT,
FISAC,
FCONTROLUNITID,
FABSTRACT,
FCALSUBMITBAL,
FISACNOTICE,
FISCUSSENT,
FISCHECK,
FISCLOSE,
FISACCOUNTCOPY,
FISMGCTRL
)
注意以上日期列的處理有點特殊,否則導入會報錯
4、在oracle數據庫中創建t_gl_voucher表
5、執行sqlldr命令,導入到oracle數據庫,命令如下:
c:\>Sqlldr userid=用戶/密碼 control=c:\voucher.ctl
6、導入完畢!