0

データベースをインポートするための Java ユーティリティがあります。Oracle でのパフォーマンスのために sqlldr を使用できるようにしたいと考えています。controlとファイルを作成できましたdataが、それは The Right Thing™ のようには思えません。INFILE "-"制御ファイルに指定することでデータをストリーミングできるはずです ( q1 - どうやって? コマンドラインから、 " echo <data...>" を sqlldr にパイプできますが、プロセスの入力ストリームに文字列をストリーミングするだけの方法が必要です? これまで Java を使用したことはありません)。制御ファイル自体をストリーミングする方法がわかりません ( q2 - または明らかな何かが欠けていますか?)。名前付きパイプを使用できますが、Windows で Java からインスタンス化して使用する方法がわかりません ( q3 - それはどのように機能しますか?)。

<moan>なぜオラクルはそれほど複雑でなければならないのですか?mysqlでは簡単でした...<moan>

4

2 に答える 2

2

「オラクルはなぜそんなに複雑でなければならないのですか?mysqlでは些細なことでした」

覚えておかなければならないことは、オラクルは由緒ある製品だということです。ユーティリティとしての SQL ローダーは、20 年以上前のものに違いありません。そのため、当然のことながら、一部の新しいツールよりも操作が難しくなります。

そのため、SQL Loader を新しい Java アプリに適合させようとするのをやめるべきです :-) 代わりに外部テーブルを見てください。これらはデータベース オブジェクトであるため、それらに対して SQL SELECT を使用できます。したがって、それらを使用してロード プロセスを自動化するのは非常に簡単です。別の質問への回答で、外部テーブルについてもう少し詳しく書きました。 見てみな。

于 2011-05-19T12:45:12.200 に答える
0

基本的に、SQLLDRは、1つ以上のファイルからデータベーステーブルにデータを取得することです。これは、特に複数のファイルまたは単一のファイルからの並列ロードを処理する場合に、その役割で強力です(複数のスレッド/プロセスが同じファイルから同時に読み取ることができます)。

これらのすべてが、実際のファイルではないものからの読み取りにうまく適合するわけではありません。データストリームがWebサービスからのものである場合は、UTL_HTTPを使用してプルします。FTPから送信されている場合は、CLOB / BLOBとしてデータベースに直接FTPで転送し、そこから処理します。

バージョンによっては、外部テーブルのプリプロセッサ機能も確認してください。

于 2011-05-19T23:49:56.870 に答える