本人刚接触,前不久刚将mssql中的数据导入到oracle
但是现在问题出现了
俺在sqlplus中查询从mssql导过来的表
就必须用双引号将其括起来在能进行
否则就提示找不到表
这也就算了
但当俺用exp\imp这两条命令的时候
则即使加了双引号也提示找不到表,利用management server向导导出,通用提示作业失败
失败原因通用是找不到表
俺郁闷
望高手赐教
最好能有办法将导过来的表完全转换成用oracle自己创建的表一样
另外还有个问题,存储过程无法通过MSSQL提供的导入导出功能实现,视图导过来则成了表格
急切!

解决方案 »

  1.   

    直接用MS SQL导过来,会有很多问题的。
    MS SQL的存储过程和Oracle差别很大,据我所知,基本是没有办法直接导过来的。我以前也从MS SQL导过数据,我的做法是这样的:
    1)在MS SQL中导出建表语句,修改为Oracle的建表语句,在Oracle中创建表。
    2)将MS SQL中的表数据,导出为.txt文件,每一个表对应一个.txt文件
    3)编写sqlldr脚本,将数据导入到Oracle
    4)对于存储过程,根据业务逻辑,在Oracle中重写
      

  2.   

    多谢humanist
    你的答案比较客观
    但一个表做一个.txt
    是一件很苦恼的事情啊 
      

  3.   

    你可以在MS SQL中,用存储过程批量生成所有表的.txt参考存储过程:--调用示例 .服务器名  sa数据库用户名 sal数据库密码 pubs数据库名 D:\OK导出路径(一定要存在)  1为导出,0为导入
    --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