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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

SQL

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

Q&A

解決済

1回答

5002閲覧

SQL loaderで空白除去

lolohacker

総合スコア31

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

SQL

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

0グッド

0クリップ

投稿2017/08/04 03:08

###前提・実現したいこと
SQL loaderでCSVファイルの各項目を空白(半角SP,全角SP)を取り除いてDBのテーブルに登録したいです

###発生している問題・エラーメッセージ
・空白(半角SP,全角SP)が前後に付加している項目をA_COLUMNに取り込もうとすると、エラーになって取り込まれないです
・桁数オーバーしないように設定すると空白(半角SP,全角SP)が付加した状態で、A_COLUMNに取り込まれる

###定義内容
↓当該カラムの定義

A_COLUMN VARCHAR2(10)

↓ctlファイルの内容

OPTIONS(SKIP=1,ERRORS=-1,ROWS=-1) LOAD DATA CHARACTERSET JA16SJIS INFILE 'HOGE.CSV' TRUNCATE INTO TABLE HOGE_TABLE FIELDS TERMINATED BY "," TRAILING NULLCOLS ( A_COLUMN )

###試したこと

No試したデータSQL Loaderのログ
1' 0123456789'桁数オーバーでエラー
2'0123456789 '桁数オーバーでエラー
3' 0123456789 '桁数オーバーでエラー
4' 0123456789'桁数オーバーでエラー
5'0123456789 '桁数オーバーでエラー
6' 0123456789 '桁数オーバーでエラー
7' 123456789'半角SPも取り込まれる
8'012345678 '半角SPも取り込まれる
9' 12345678 '半角SPも取り込まれる
10' 3456789'全角SPも取り込まれる
11'0123456 '全角SPも取り込まれる
12' 3456 '全角SPも取り込まれる

↓とすると半角SPは取り除かれることを確認しました

※省略※ ( A_COLUMN "TRIM(:A_COLUMN)" )

###補足情報
・DBのバージョン:Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
・SQL Loaderでは不要な空白は除去されることは色々なサイトから情報を得て、何故か除去されません

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

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

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

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

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

guest

回答1

0

ベストアンサー

trimをネストさせて、全角/半角両方を除去してはどうでしょう。

A_COLUMN "TRIM(' ' from TRIM(:A_COLUMN))"

※oracle実行環境が手元になく検証していません。

投稿2017/08/04 03:35

sazi

総合スコア25184

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

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

lolohacker

2017/08/04 03:58 編集

除去されることを確認できました。ありがとうございます。 追加でお聞きしたいのですが、 [半角SP][全角SP]0123456789[半角SP][全角SP] [全角SP][半角SP]0123456789[全角SP][半角SP] というパターンはSQL Loaderでは難しいでしょうか?
sazi

2017/08/04 04:56 編集

上記程度の組み合わせであれば4回ネストすればいいでしょうけど、もっと連続しているなら、 文字列中の空白を全角か半角に統一して良い前提で、 trim(replace(A_COLUMN,' ',' ')) --全角を半角スペースに置換してtrim という方法も考えられます。
lolohacker

2017/08/04 04:59

ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問