システム上のデータベースにbcp
データをインポートするためにユーティリティを使用していますSybase
Solaris
bcp ファイルは別の xml 解析スクリプトによって生成されるため、必要な順序でフィールドを生成するように制御することはできません。また、bcp ファイルのフィールドの順序は、データベース テーブルの順序と少し異なります。
bcp ツールのフォーマット ファイルを使用して、データベースにロードされるフィールドの順序を制御したいので、以下のサンプル bcp ファイルを用意し、それに応じてフォーマット ファイルを作成しました。
bcp ファイル:
603289|Aug 20 2011 12:00AM|YYY aaa OVD|KLYYP8
603284|Aug 22 2011 12:00AM|XXX bbb OVD|KLPK06
フォーマットファイル:
10.0
4
1 SYBCHAR 0 12 "|" 3 ver
2 SYBCHAR 0 26 "|" 2 first_dt
3 SYBCHAR 0 60 "|" 4 name1
4 SYBCHAR 0 10 "|" 1 name2
次のエラーで立ち往生していますが:
$bcp my_db..my_tbl in test.bcp -e error -f format.fmt -r\\n -S Sever -U user -P pw
Starting copy...
CSLIB Message: - L0/O0/S0/N24/1/0:
cs_convert: cslib user api layer: common library error: The conversion/operation was stopped due to a syntax error in the source field.
Unexpected EOF encountered in BCP data-file.
bcp copy in partially failed
1 rows copied.
エラーの原因は、bcp ユーティリティが「\n」文字である行区切り文字を認識できないことだと思われます (od -c test.bcp
これを確認するために使用しました)。-r\\n
コマンドのオプションは機能しないようです。行区切り文字を '\n' 文字として。
誰も手がかりを持っていますか?
編集:
フォーマット ファイルを変更したところ、正常に動作するようになりました。最後のフィールドのフィールド区切り文字を '|' から変更しました。以下のように '\n' に:
新しいフォーマットファイル:
10.0
4
1 SYBCHAR 0 12 "|" 3 ver
2 SYBCHAR 0 26 "|" 2 first_dt
3 SYBCHAR 0 60 "|" 4 name1
4 SYBCHAR 0 10 "\n" 1 name2
Michael がコメントで述べたように、フォーマット ファイルを使用するのは難しいです。元の形式ファイルを使用する場合、「|」を追加しようとしました ファイルは正しく処理されませんでしたが、各レコードの最後に。
これでファイルを正しく処理できるようになりましたが、bcp ユーティリティで行区切り記号として何が使用されているかはわかりません