
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
お世話になります。
SQLローダーでCSV取込を行っています。
設定は下記のようになっており、区切り文字はコンマ
囲み文字はダブルコーテーションを指定しています。
LOAD DATA
TRUNCATE
CONTINUEIF LAST != '"'
INTO TABLE WORKTABLE
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
data1 char,
data2 char,
data3 char
)
このように取り込んだところ、下記のような行でエラーが発生しました。
「"data1","data2",""文字列,文字列""」
どうやら元々ダブルコーテーションで囲まれていたデータが
CSV出力時にもう1度囲まれた状態のようです。
エラー内容
「TERMINATEDとENCLOSEDフィールドに続く終了記号がありません。」
原因はダブルコートであることはわかっています。
色々試したのですが、うまくいきません。
このデータをうまく取り込む方法はあるのでしょうか
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
LOAD DATA
TRUNCATE
CONTINUEIF LAST != '"'
INTO TABLE WORKTABLE
TRAILING NULLCOLS
(
data1 char TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"',
data2 char TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"',
data3 char TERMINATED BY x'09'
)
のように、フィールド毎に、区切りや囲みを指定する事は可能です。
上記の例だと、第3フィールドは「""文字列,文字列""」という内容で登録されます。
ローダーはダブルコーティション以外の囲み文字の場合には、ダブルコーティションを
エスケープ文字として使えないので、そのままロードされます。
なので、data3にREPLACE関数記述で、ダブルコーティション2個を1個に置換すれば、
実質的にエスケープ文字として使えるんじゃないですかね。
(「""aa,bb,"",cc,""」→「"aa,bb,",cc,"」のような感じで。)
No.2
- 回答日時:
パラメータに・・
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
と書く場合、
各フィールドが、”で囲まれている必要があります。
そして、”を文字として扱いたい場合は、””と書くルールになっています。
ということで、パラメータの記述から見たデータの表現が不適切なので
エラーになっています。
第3フィールドの””文字列,文字列””は、どのように扱いたいのでしょう?
「””文字列,文字列””」と登録したいのですか?
「”文字列,文字列”」と登録したいのですか?
「文字列,文字列」と登録したいのですか?
たまたま最終フィールドなので、場合によっては何とかなるかも知れません。
この回答への補足
ご回答ありがとうございます。
「”文字列,文字列”」と登録したいのです。
色々試行錯誤した結果、「","」を区切り文字に指定、囲み文字は無しで
data1 CHAR "SUBSTR(:data1,2)" のような感じで
第1フィールドの最初のダブルコーテションと第3フィールドの最後のダブルコーテーションを
削除することで、とりあえずエラー回避には成功しました。。。
しかしあまりスマートな方法とは思えない為、
何か良い回避方法があれば教えていただけると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
SQL*LoaderでCSVから指定した列のみインポートしたい。
Oracle
-
sql*loader 数値のロード
Oracle
-
カンマがデータとして入ってるCSVについて
Oracle
-
-
4
SQL*Loaderで、データを加工してロードしたいです。
Oracle
-
5
SQL*Loaderでのsysdate使用
Oracle
-
6
SQL Loaderを使いたい
Oracle
-
7
SQLLOADER
Oracle
-
8
SQL*Loader Append
Oracle
-
9
SQL*Loaderのコミットポイント設定がうまくいってない?
Oracle
-
10
Oracleでの文字列連結サイズの上限
Oracle
-
11
SQL*Loader フォーマット変換について
Oracle
-
12
oracle spool SJIS → UTF-8
Oracle
-
13
SQLローダーで複数のCSVファイルのデータを一つのテーブルにInsertしたい
その他(データベース)
-
14
データ削除とSQL*Loaderでのインポート
Oracle
-
15
データを削除しても表領域の使用率が減りません
Oracle
-
16
PL/SQLで@ファイル名が反応しません
Oracle
-
17
selectした結果の余計な余白を取るにはどうしたらよいのでしょうか
Oracle
-
18
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
19
SQLPLUSで結果を画面に表示しない
Oracle
-
20
SQL*LOADER実行時のロードデータチェック
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLローダーCSV取込で、囲み文...
-
SELECTした合計値をそのまま割...
-
CSVからNULL値をインポート
-
BLOBやCLOBのパフォーマンスを...
-
固定長データのテキストファイ...
-
Null値件数をカウントする式に...
-
最大値が抽出できない!
-
SELECT FOR UPDATE で該当レコ...
-
SQL*Loader Append
-
レコードの登録順がおかしい
-
where句中のtrim関数について
-
Oracleで「文字が無効です」の...
-
select文の実行結果に空白行を...
-
ACCESS レコードの並び順について
-
ファイルの漢数字の順番につい...
-
VB6のオラクルのバインド変数
-
count関数の値をwhere句で使用...
-
単一グループのグループ関数で...
-
ソート(PL/SQL)
-
データ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLローダーCSV取込で、囲み文...
-
テーブルの最後(最新)のレコー...
-
BLOBやCLOBのパフォーマンスを...
-
int型フィールドにnullを登録で...
-
ACCESSのクエリで空白以降を別...
-
ファイルメーカー10で重複デー...
-
テーブルのフィールドの一番長...
-
2回実行のSQL文を1回にしたい
-
Null値件数をカウントする式に...
-
タイムスタンプ型を抽出条件に...
-
配列に指定した値が含まれてい...
-
固定長データのテキストファイ...
-
SELECTした合計値をそのまま割...
-
入力データの半角スペースと全...
-
CSVからNULL値をインポート
-
【MySQL】 DECIMAL(2,1) に 13...
-
ファイルメーカーのフィールド...
-
MySQLでの近似値順での値の取得...
-
最初のレコードを取得したい
-
DateTime型の検索
おすすめ情報