OracleのデータをMySQLに移行するためCSVに出力したいが、以下の文字が邪魔

OracleのデータをMySQLに移行するためCSVに出力したいが、以下の文字が邪魔(面倒)である。
・改行 (CRLF、LF、CR)
・ダブルクォーテーション


調査

面倒なので、これらの文字をOracle上のデータを直接別の文字に置換、
MySQLインポート後に元の文字に戻すことにした。

まずは改行がどの程度存在するか?
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%' || CHR(13) || '%';
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%' || CHR(13) || '%';
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%' || CHR(13) || CHR(10) || '%';
上記の結果、すべて同じ件数であった。
つまり改行コードは CRLF のみ存在する。

改行をどの文字に置換するか?
妥当なのは "\r\n" だろう。
ということで、置換後文字が存在しないことを確認。
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%\r\n%';
存在しなかったのでOK

次にダブルクオーテーション、件数を確認。
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%"%';
存在していた。

何の文字に置換するか?
単純に " の文字コードを表す "CHR(34)" で置換することにする。
置換後文字列が存在しないことを確認。
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%CHR(34)%';
存在しなかったのでOK

ちなみに
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%CHR(13)%';
・SELECT COUNT(*) FROM xxx WHERE yyy LIKE '%CHR(10)%';
のレコードが存在しなかったので、
改行文字も "\r\n" でなく "CHR(xx)" の形式で置換することにする。

置換実行
・UPDATE xxx SET yyy = REPLACE(yyy, CHR(13), 'CHR(13)') WHERE yyy LIKE '%' || CHR(13) || '%'; CHR(10)、CHR(34)に対しても同じによう実施する。

0 件のコメント:

その他の記事