4

Java メソッドから SQL Loader を実行しようとしていますが、問題に直面しています。

SQLLDR コマンドを実行するランタイム プロセスを作成していますが、データ ファイル内のすべての行がロードされていません。代わりに、データ ファイル内の合計行数に関係なく、同じ行数 (5184 行) で停止します。

ただし、まったく同じコマンドをコピーしてコマンド プロンプトから直接実行すると、完全に機能し、すべての行が読み込まれます。

この問題の原因は何ですか?私が変更する必要があるのは、Javaのある種のバッファサイズですか?

ありがとう!

// Run SQL Loader after creating the control file
        Runtime rt = Runtime.getRuntime();
        String sqlLoaderPath = "C:\\app\\product\\11.1.0\\client_1\\BIN\\";
        String cmd = sqlLoaderPath + "SQLLDR.EXE userid=***************************"
                            + "data=c:\\sqlldr\\sqlldr_data.dat "
                            + "control=c:\\sqlldr\\sqlldr_control.ctl "
                            + "log=c:\\sqlldr\\sqlldr_log.log "
                            + "discard=c:\\sqlldr\\sqlldr_discard.disc "
                            + "bad=c:\\sqlldr\\sqlldr_bad.bad ";
        Process proc = rt.exec(cmd);
        int exitVal = proc.waitFor();
        proc.destroy();
4

2 に答える 2

1

今この質問に答えるには遅すぎることはわかっていますが、同様の問題に直面したので書いています。sql-loader 制御ファイルの options 句に SILENT=FEEDBACK を追加するだけです。Sql-loader は出力ストリーム用に制限されたバッファ サイズを提供し、読み取りに失敗するとサブプロセスが JAVA 経由でハングするため、オプションで SILENT を使用して sql-loader の出力ストリームを停止するだけです。

于 2015-10-22T19:38:54.510 に答える