質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

3459閲覧

CSVファイルの改行コードの削除

yamaguti

総合スコア185

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2017/09/25 08:12

お世話になっております。

データの移行作業を行っているのですが、移行元データCSVに改行コードが
入っておりSQLLoaderで取り込んだ際に、ずれが起こってしまいます。
(列の最終列以外に改行が入ってしまっている)

正規表現等でうまく取り除くことはできますでしょうか?
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

SQL*Loaderのレコード終端文字変更

ところが、今度は、フィールドに改行を含んだデータが存在するではないですか!!

「やけにエラーが多いんですけど・・・」(リーダー)
そりゃ、そうでしょう。フィールド値に改行が入れば、そこでレコードが終了とSQL*Loaderは判断し、改行後は項目数が足りなくて、エラーを出しますよ。
これは想定外でした。

と言うことで、レコードの終端を変更する設定をすることに。

------------ 以下 ctlファイル内容 -------------------------

-- SQL*Loader用制御ファイル開始
LOAD DATA
-- CSVファイル(終端文字の指定)
INFILE 'SampleData.csv' "str '@END-REC@'"
-- 格納するテーブル(テーブル内のデータを空にしてから格納)
INTO TABLE SampleTable TRUNCATE
-- 区切り文字の指定
FIELDS TERMINATED BY X'09'
-- 囲み文字の指定
OPTIONALLY ENCLOSED BY '"'

-- カラムの列挙

(
err1_id ,
err2_id ,
err1msg ,
err2code ,
err2msg
)
------------ ctlファイル内容ここまで ----------------------

------------- SampleData.csvここから ----------------------

"001","AAA","ああああ","1234","AA1"@END-REC@
"002","BBB","いい
いい","5678","BB2"@END-REC@
"003","CCC","うううう","9012","CC2"
------------- SampleData.csvここまで ----------------------

投稿2017/09/25 08:43

Zuishin

総合スコア28673

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamaguti

2017/09/25 09:16

ありがとうございました。
guest

0

そのようなケースでよくあるのは、フィールドの囲み文字("など)が無い場合です。
移行元に囲み文字付きのデータで提供してもらうように依頼が必要です。

その上で、コントロールファイル のOPTIONALLY ENCLOSED BYでその文字を指定して下さい。

そうでなければ、レコードの終端を改行以外にしてもらう、若しくは固定長にしてもらうしか無いかと思います。

投稿2017/09/25 15:15

sazi

総合スコア25430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問