实现功能:
   oracle服务器上有一个txt文本,然后再用ftp上传到一台远程机器(192.168.11.11)上。
在先问一下这样可不可以实现这种功能?PROCEDURE ftpfile 
IS   l_conn  UTL_TCP.connection;BEGIN l_conn := ftp.login('192.168.11.11', '21', '1', '1');
 ftp.ascii( l_conn);ftp.put(p_conn      => l_conn,
          p_from_dir  => '/tmp/',--服务器上的目录,操作系统是linux
          p_from_file => 'emp.txt',--服务器上的文件名
          p_to_file   => 'emp.txt');--想要在11.11这台机器上生成的文件           
  ftp.logout(l_conn);
  utl_tcp.close_all_connections;END;这段代码执行时一直报"non-existent directory or file for fileopen operation"但是我服务器上有这个目录和文件啊。。是代码不对还是目录有问题呢???

解决方案 »

  1.   

    1、确定当前用户oracle具有/tmp/权限
    2、设置utl_file_dir参数指向/tmp/
      

  2.   

    远程机器(192.168.11.11)上 FTP服务开了没?没开的话肯定没法访问到远程机器上的目录的
      

  3.   

    远程机器上装个FTP软件,设置下文件要放的目录
      

  4.   


    用户是有/tmp/权限的,/tmp/emp.txt这个文件也是由这由存储过程生成的的.
      

  5.   


    这台机器的ftp服务也是开了的,我把ftp这个方法注释掉,就不会报错了.
      

  6.   

    终于实现了这个变量  p_from_dir是路径的名字,不是直接的物理地址。
    要用语句先插一个路径名:create or replace directory emp_dir as '/tmp';可以用这个语句来查询是否创建成功: select * from all_directories;代码如下PROCEDURE ftpfile  
    IS  l_conn UTL_TCP.connection;BEGIN l_conn := ftp.login('192.168.11.11', '21', '1', '1');
     ftp.ascii( l_conn);ftp.put(p_conn => l_conn,
      p_from_dir => 'EMP_DIR',--这里的路径名注意要用大写
      p_from_file => 'emp.txt',--服务器上的文件名
      p_to_file => 'emp.txt');--想要在11.11这台机器上生成的文件    
      ftp.logout(l_conn);
      utl_tcp.close_all_connections;END;