SQLサーバーからオラクルに移行しようとして奇妙な問題に直面しています。私のテーブルの1つに、NVARCHAR(255)
オラクルがバイトをカウントするときにSQLサーバーが文字をカウントしていることを少し読んだ後、によって定義された列があります。そこで、オラクルでテーブルをVARCHAR(510)
255*2 = 510 と定義しましたが、sqlldr を使用してタブ区切りのテキスト ファイルからデータをロードすると、一部のエントリがこの列の長さを超えていることを示すエラーが発生します。次を使用してSQLサーバーにチェックインした後:
SELECT MAX(DATALENGTH(column))
FROM table
最大データ長は 510 です。
私は Hebrew_CI_AS collationg を使用していますが、何も変更されていないと思います.... SQL Server で、エントリのいずれかに TAB が含まれているかどうかもチェックインしましたが、含まれていない...だから、破損したデータではないと思います....アイデア?
EDIT さらに調べたところ、問題はデータファイルが原因であることに気付きました(@Justin Caveの投稿で解決された問題に加えて.
私のデータにはこの文字と「|^|」が含まれていないため、行区切りを「^」に変更しました。列区切りとして。
次のように制御ファイルを作成します。
load data
infile data.txt "str '^'"
badfile "data_BAD.txt"
discardfile "data_DSC.txt"
into table table
FIELDS TERMINATED BY '|^|' TRAILING NULLCOLS
(
col1,
col2,
col3,
col4,
col5,
col6
)
問題は、私のデータが含まれて<CR>
おり、そこにストリームファイルを期待しているsqlldrが<CR>
!!!!で失敗することです。テキストデータであるため、データを変更したくありません(例のエラーメッセージ)。