问题描述:
在oracle数据库的服务器上有一个文件夹utl_file里边存放了一些数据文件其中文件内容格式是:id,desc,type.即如:(11221,商品1,VIP)。现在我想通过java程序(java程序不在oracle机器上)调用过程test_proc(我自己写的一个过程),用该过程(test_proc)来完成数据的导入功能。我想在test_proc过程中调用oracle的sqlldr命令,不知道在过程中应该怎么调用sqlldr命令?我想再说明一下:我想实现的数据的导入功能,一定是要通过程序来实现,排除手动运行sqlloder进行数据导入的情况。希望大家帮助!

解决方案 »

  1.   

    存储过程调用sqlldr,感觉上不行。解决方案1:
    写一个sqlldr脚本,windows上bat,unix上shell,在脚本中调用sqlldr,java直接调脚本。解决方案2:
    在存储过程中使用外部表
      

  2.   

    1楼的老兄,谢谢了!解决方案1: 
    写一个sqlldr脚本,windows上bat,unix上shell,在脚本中调用sqlldr,java直接调脚本。能够给个小例吗?
      

  3.   

    ORACLE现在本身有一个JAVA存储过程,这个东西 可以调用 shell,exe等。
      

  4.   


    shell脚本写,脚本里和综合执行sql以及plsql procedure还有sqllrd的命令
      

  5.   

    1.写好sqlldr的ctl文件
    2.shell文件:
    #!/bin/sh 
    sqlldr schemaname/password@servername control=controlname.ctl log=sqlldrlog.log 
    retcode=`echo $?` 
    case "$retcode" in 
    0) echo "SQL*Loader execution successful" ;; 
    1) echo "SQL*Loader execution exited with EX_FAIL, see logfile" ;; 
    2) echo "SQL*Loader exectuion exited with EX_WARN, see logfile" ;; 
    3) echo "SQL*Loader execution encountered a fatal error" ;; 
    *) echo "unknown return code";; 
    esac 
      

  6.   

    Java代码里面:
    String cmdstr =  "/path/shellname.sh";
    Runtime.getRuntime().exec(cmdstr); 
      

  7.   

    5楼的这种方法,我还不如直接在java中调用String cmdstr =  “sqlldr schemaname/password@servername control=controlname.ctl log=sqlldrlog.log ";
    Runtime.getRuntime().exec(cmdstr); 
    请说说你这个方法的优点。
    我想要的是把sqlldr的控制文件放在,oracle数据库服务器上,而运行java代码的服务器是另外一个。
    5楼的这个方法应该是java代码的运行服务器和sqlldr存放的服务器是同一台机器吧?
      

  8.   

    要把oracle 服务器上的文件夹拷贝到java程序的这台服务器上来然后java程序的这台服务器也装个sql*load就可以了