需求:从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), ???FLASTUPDATEUSERID, ???FLASTUPDATETIME? "TO_DATE(SUBSTR(TO_CHAR(:FLASTUPDATETIME), ???FHANDLERID, ???FDESCRIPTION, ???FHASEFFECTED, ???FAUDITORID, ???FSOURCEBILLID, ???FSOURCEFUNCTION, ???FCOMPANYID, ???FPERIODID, ???FVOUCHERTYPEID, ???FCASHIERID, ???FPOSTERID, ???FCANCELLERID, ???FSOURCESYS, ???FSOURCETYPE, ???FBOOKEDDATE? "TO_DATE(SUBSTR(TO_CHAR(:FBOOKEDDATE), ???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、导入完毕!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|