0

DB2 データベースにクエリを実行し、出力をファイルにエクスポートするシェル スクリプトがあります。エクスポートせずに SQL ステートメントを実行すると、次のようになります。

su - myid -c 'db2 connect to mydb;db2 -v "select COL1"; db2 connect reset;'

サンプル出力

COL 1
x'20A0E2450080000'
x'50D24520E100GDS00'
x'10H0EFJ10080000'
x'50A0GH0080000'
x'80RHE1008B0000'
x'70A50E1F4008000'
x'10F329EF09BB0'

しかし、まったく同じクエリを使用して結果をエクスポートすると、次のようになります。

su - myid -c 'db2 connect to mydb;db2 -v "EXPORT TO '/tmp/query_results.out' OF DEL MODIFIED BY COLDEL: select COL1 from MYTABLE"; db2 connect reset;'

サンプル出力

hôª"
"xàÓ °á
"èÅ °á
hôª"
"é# °á
hôª"
"é« °á
hôª"
"éÅ °á
hôª"
"""ÒYá   á
hôª"
"#sYá    á
hôª"

これは一重引用符が原因だと思います。どちらも前に別の文字があるため、前に「\」を追加できませんでした。また、クエリ内で substr 関数を実行しようとしましたが、同じ結果が得られますが、短いだけです。私が見落としているものがあるに違いないと確信しているので、自分で試して(そして失敗して)数日間過ごした後、私はあなたたちに目を向けています。どんな助けでも大歓迎です。

*編集: 私の実際の選択ステートメントには、正しく表示される複数の列が含まれていることを追加したかっただけです。そのため、いくつかの列のうち、1 つだけが不適切なデータを表示しています。

4

1 に答える 1

2

これは一重引用符が原因だと思います」 -- いいえ。この特定の列には、BLOB または VARCHAR FOR BIT DATA のいずれかのバイナリ データが含まれています。BLOB の場合、EXPORT コマンドで LOBS TO を指定すると、BLOB がバイナリ ファイルに書き込まれます。VARCHAR FOR BIT DATA の場合は、後でエクスポートを行う予定に応じて、エクスポート ( export to ... lobs to ... select blob(your_column)...)で BLOB に変換するか、としてエクスポートできます。hex(your_column)

VARCHAR FOR BIT DATA のもう 1 つの代替方法は、DEL の代わりに IXF 形式を使用してテーブルをエクスポートすることです。これにより、バイナリ文字列が保持されます。

于 2013-07-29T20:27:50.620 に答える