sql >> データベース >  >> RDS >> Oracle

ORA-01401:挿入された値がCHAR列に対して大きすぎます

    データファイルに余分な非表示の文字が含まれています。オリジナルは表示されませんが、おそらくWindowsで作成されており、CRLF 新しい改行>;そして、改行(LF)のみを期待しているUNIX/Linux環境でSQL*Loaderを実行しています。キャリッジリターン(CR)文字はまだファイル内にあり、OracleはそれらをファイルのZIPフィールドの一部として認識しています。

    最後の行にはCRLF(または改行マーカー)がないため、その行に-そしてのみ その行-ZIPフィールドは5文字として表示され、他のすべての場合は6文字として表示されます。 98001^M

    デフォルトの動作の詳細については、ドキュメントを参照してください。

    viやvimのような編集でデータファイルを開くと、それらの余分な^Mが表示されます。 制御文字。

    これを修正する方法はいくつかあります。ファイルを変更できます。これを行う最も簡単な方法は、SQL * Loaderを実行する環境で作成された新しいファイルにデータをコピーして貼り付けることです。必要に応じて、行末を変換するユーティリティがあります。 dos2unix 。または、WindowsエディターがCRなしでファイルを保存できる場合があります。 Dittoが提案したように、データファイルにフィールド区切り文字を追加することもできます。

    または、INFILEを変更して、SQL*LoaderにCRLFを予期するように指示することもできます。 行:

    LOAD DATA
    INFILE Customer.dat "str '\r\n'"
    INTO TABLE Customer
    ...
    

    ...ただし、CR文字を使用せずにLinuxで作成されたファイルを提供すると、問題が発生します。



    1. SQLite-ORDER BY RAND()

    2. MySQLテーブルの主キーをプレフィックス付きで自動インクリメントする方法

    3. RefCursorの戻り型を使用してOracleストアドプロシージャをテストするにはどうすればよいですか?

    4. MYSQLの日付に基づいてレコードをフェッチする方法