4

sqlldrを使用して、一部のフィールドに末尾と先頭の空白があるデータをロードしています。言う以外に、sqlldrにこれらの空白を無視するように指示する方法はありますか?

field "trim(:field)"

4

2 に答える 2

4

ほとんどの場合、フィールド "trim(:field)" は問題なく動作しますが、列のサイズが char(1) で、制御ファイルのデータが "Y" と "trim(:field)" であるという典型的なケースを思いつきました。データの読み込みに失敗しました。多くの調査の結果、trim() 関数がデータから空白を削除すると同時に、空白の代わりにデータに null を追加することがわかったので、上記の例のデータ長は null 値をカウントするため 2 になります。データの左側。したがって、データは nullY のようなものになります。これは、テーブルの列サイズが実際のサイズよりも小さく、ロードされておらず、Oracle がエラー メッセージをスローするためです。この問題を克服するために、「trim(null from trim(:field))」を使用しました。

上記のスクリプトは、最初に空白を削除してから、SQL ローダーによって追加された null を再度削除します。

私が提供した情報が、私と同じように問題に直面しているすべての人に役立つことを願っています. この種の問題に答えるスレッドが見つからなかったため、これを投稿することに抵抗できませんでした。

于 2016-12-27T15:13:50.763 に答える
1

古いスレッドであることはわかっていますが、とにかくチャイムを鳴らします。

多くの場合と同様に、答えは「場合による」です。データが固定形式か区切られているかによって異なります。区切られている場合は、制御ファイルが OPTIONALLY ENCLOSED BY 句を使用するかどうかにも依存します。詳細については、Oracle SQL*Loader のドキュメントを参照してください。たとえば、次のリンクを試してください: http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1007768

于 2013-08-12T00:14:57.583 に答える