2011-12-19 298 views
2

sqlldrを使用して、いくつかのフィールドに後続および先頭の空白があるデータをロードしています。これらの空白を無視するようにsqlldrに指示する方法はありますか?sqlldrに末尾および先頭の空白をトリムする方法

field "trim(:field)" 

+1

実際、デフォルトでは、オプションの 'PRESERVE BLANKS'がなければ、先頭と末尾の空白は無視されます。私の質問は、デフォルトで 'PRESERVE BLANKS'を追加するctlファイルを生成するsqlldrの上にツールを使用していたという事実から生じました。 –

+0

このように、先頭と末尾の空白はデフォルトでは無視されていますが、特定のデータ型に対してのみ有効です。ただし、VARCHARなどの一部のタイプでは、スペースはそのまま残ります。以下のリンクを参照してください http://www.csee.umbc.edu/portal/help/oracle8/server.815/a67792/ch05.htm#5817 –

答えて

0

私はそれが古いスレッドだと知っていますが、とにかくチャイムします。

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

2

フィールド "trim(:field)"はほとんどの場合、うまく動作しますが、カラムサイズがchar(1)だったのですが、制御ファイルのデータは「Y」と「トリム(:フィールド)」のデータのロードに失敗しました。 多くの研究の後、私はtrim()関数がデータから空白をトリミングするのに対し、同時に空白の代わりにnullをデータに追加するので、上の例のデータ長はnullになるので2になりますデータの左側の値。したがって、データはnullYのようなものになります。表の列サイズが実際のサイズよりも小さく、Oracleがエラー・メッセージをスローするためです。 "trim(null from trim(:field))"

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

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

+0

ええ、これは私に多くの感謝を助けます! – Reimius

+0

私は好奇心が強いですが、デュアル( 'food')のトリムを選択してデュアルでテストすると動作しないようです。それはsqlloaderでは異なった働きをしますか? – Reimius

関連する問題