@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

LOAD DATA INFILE での型違い値の制御

1
投稿者投稿内容
未記入
会議室デビュー日: 2008/05/09
投稿数: 4
投稿日時: 2008-05-09 20:25
みなさん、初めまして。

現在、仕事でファイル読込処理を実装しています。
読込部分は問題なく実装することが出来たのですが、
誤った型を投入しようとした際にエラーを発生させるといった処理が
うまく出来ずに困っています。

調べたところ、SQLモードで制御できるとのことだったので、
my.iniのsql-modeにTRADITIONALを設定してみたのですが制御がききません。

例えば、int型のテーブル定義に文字列を投入しようとしても0が登録されてしまいます。

my.iniの反映タイミングが分からず、テーブルの作り直し・DBの作り直し・DBの再起動
としてみたのですがwarningが発生するだけでerrorが発生しません。

何か、見落とし・勘違い部分等ありましたらご指摘下さい。

お願いします!
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-05-09 22:21
もうすこし具体的に書かないと回答できません

使用言語を記述するとか、部分的でもいいからコードを開示するとか

SQLモードに関しては私はなんのことかわかりませんが、誤った型の値があるということは検知できるのですか?



未記入
会議室デビュー日: 2008/05/09
投稿数: 4
投稿日時: 2008-05-23 17:30
失礼しました。

使用言語は、Javaです。

使用SQL=====

load data local infile [ファイル名] into table テーブル名
FIELDS TERMINATED BY ',' enclosed by '"'
lines terminated by '\r\n'
(Colmun1,
Colmun2,
Colmun3)

===================

ただ、今回の問題点はSQLでファイル読込した際に
型違い、設定値オーバーの際に勝手に適当な値を
登録してしまうというところにあります。

例えば、int型のカラム部分に文字列を読み込んでしまった際は
ERRORをだして登録を止めて欲しいのに、勝手な値"0"を登録して
しまうといったことで困っています。

誤った型の値かどうかは、WORNINGが出力されるので実装としては
WORNINGが発生した場合は、登録データを全削除するといった方法で
今回の開発は回避できました。

出来れば、プログラムではなくSQLで回避したかったので
ERRORで登録を止めるといった方法を知っている方がいれば、
ご教授頂きたいです。

でも、load data 処理は、insertと違ってrollbuckが
出来ないみたいですし、無理なんでしょうか??


自分で調べてみたところ、my.iniのsql-modeにTRADITIONALを
設定しておくとINSERT文は型違い、設定値オーバーの値を登録しようと
した際にはERRORで登録を中止してくれるみたいです。
未記入
会議室デビュー日: 2008/05/09
投稿数: 4
投稿日時: 2008-05-23 20:33
ああ。
大切な情報が抜けていました。

使用DBは、MySQLの5.0.6です。

宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-05-24 19:27
引用:

未記入さんの書き込み (2008-05-23 17:30) より:

使用言語は、Javaです。


であるなら、ここは Insider.NET 会議室なので板違いです。 Java Solution 会議室で再度質問をした方が良いと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)