本人刚接触,前不久刚将mssql中的数据导入到oracle
但是现在问题出现了
俺在sqlplus中查询从mssql导过来的表
就必须用双引号将其括起来在能进行
否则就提示找不到表
这也就算了
但当俺用exp\imp这两条命令的时候
则即使加了双引号也提示找不到表,利用management server向导导出,通用提示作业失败
失败原因通用是找不到表
俺郁闷
望高手赐教
最好能有办法将导过来的表完全转换成用oracle自己创建的表一样
另外还有个问题,存储过程无法通过MSSQL提供的导入导出功能实现,视图导过来则成了表格
急切!
但是现在问题出现了
俺在sqlplus中查询从mssql导过来的表
就必须用双引号将其括起来在能进行
否则就提示找不到表
这也就算了
但当俺用exp\imp这两条命令的时候
则即使加了双引号也提示找不到表,利用management server向导导出,通用提示作业失败
失败原因通用是找不到表
俺郁闷
望高手赐教
最好能有办法将导过来的表完全转换成用oracle自己创建的表一样
另外还有个问题,存储过程无法通过MSSQL提供的导入导出功能实现,视图导过来则成了表格
急切!
MS SQL的存储过程和Oracle差别很大,据我所知,基本是没有办法直接导过来的。我以前也从MS SQL导过数据,我的做法是这样的:
1)在MS SQL中导出建表语句,修改为Oracle的建表语句,在Oracle中创建表。
2)将MS SQL中的表数据,导出为.txt文件,每一个表对应一个.txt文件
3)编写sqlldr脚本,将数据导入到Oracle
4)对于存储过程,根据业务逻辑,在Oracle中重写
你的答案比较客观
但一个表做一个.txt
是一件很苦恼的事情啊
--exec file2table '.','sa','sa1','pubs','D:\OK',1Create procedure File2Table
@servername varchar(200)
,@username varchar(200)
,@password varchar(200)
,@tbname varchar(500)
,@filename varchar(1000)
,@isout bit
as
declare @sql varchar(8000)
if @tbname like '%.%.%'
begin
set @sql = 'bcp ' +@tbname
+ case when @isout = 1 then ' out' else ' in' end
+' "'+@filename + '"/w'
+' /S' + @servername
+ case when isnull(@username,'')='' then '' else ' /U'+@username end
+ ' /P'+isnull(@password,'')
exec master..xp_cmdshell @sql
end
else
begin
declare @m_tbname varchar(250)
if right(@filename,1) <> '\'
Set @filename = @filename + '\'
Set @m_tbname = 'declare #tb cursor for Select name From ' + @tbname +'..sysobjects where xtype=''U'''
exec(@m_tbname)
open #tb
fetch next from #tb into @m_tbname
while @@fetch_status = 0
begin
set @sql = 'bcp ' + @tbname + '..'+@m_tbname
+ case when @isout=1 then ' out' else ' in' end
+' "'+@filename + @m_tbname + '.txt" /w'
+ ' -t "," '
+' /S ' + @servername
+ case when isnull(@username,'') = '' then ''
else ' /U' + @username end
+ ' /P' + isnull(@password,'')
exec master..xp_cmdshell @sql
fetch next from #tb into @m_tbname
end
close #tb
deallocate #tb
end