我想在delphi中实现把从SQL server中bcp出来的文件导入到oracle数据库中,请问如何可以实现呢?在网上看到介绍sqlldr命令导入的,具体该怎样做呢?在delphi中该怎样做呢?能提供一个简单的例子给我吗?请高手指教!谢谢!

解决方案 »

  1.   

    sqlldr是oracle外部命令,需要ctl文件支持,ctl和bcp出来的结果并不一样,需要你把对标结构的描述加上参考http://blog.csdn.net/jinjazz/archive/2008/07/21/2686526.aspx
      

  2.   

    谢谢,如果我把bcp出来的txt文件导入到oracle可以吗?ctl文件的格式是这样吗:
    load   data   
      infile   '\\10.10.10.123\test\2.TXT'        
      into   table   tiger.TEST_TABLE_IN        
      fields   terminated   by   ","
      (ID,NAME,ADDRESS) 
    BEGINDATA
    '1','11','111'
    '3','33','333'
    '2','22','222'  另外,我应该如何写能够在delphi上执行的sqlldr命令呢?万分感激!!!
      

  3.   

    我已经可以实现在服务器本地导入了,但是想问以下应该如何实现从远程导入,如我在一台机器运行sqllldr命令,想把数据导入到远程机器的数据库中,应该如何实现呢?
      

  4.   

    远程机器是在局域网中吗?如果是,可以在本机建一个远程数据库的本地服务(如sid1),然后直接用sqlldr userid=username/password@sid1 这样导入就行了,本地机器上要装Oracle客户端
      

  5.   

    另外有关你发消息中得另一个问题sqlserver调用bcp是通过xp_cmdshell扩展存储过程来调用得,这完全是为了让t-sql可以调用外部命令而绕得圈子,既然你已经用开发语言了就没有必要这么做,直接用shellexeute之类方法来调用bcp和sqlldr就可以了。
      

  6.   

       非常感谢上面两位的解答,我也试过远程导入了,也设了sid,导入的时候也没有提示出错,但是查数据库刚导入的数据却空,只是第一行的第一个字段有一个问号(假设我要到入的数据有三行,用REPLACE操作,导入后,一共有三行,只有第一行第一个字段下有一个“?”,其它都是空格),我在本地导入相同的数据文件没有问题,不知道是哪里出错呢?
        另外,(回复jinjazz),我通过运行xp_cmdshell是因为它会返回一个集合,我可以通过判断这个集合来校验bcp出来的行数是否与源相同,而且如果不同的话,我可以直接把哪个返回结果显示出来,所以在oracle中我也想通过类似的方法,通过检查返回值来判断操作是否成功,这是我个人的理解,还望指教,谢谢!