プロが教える店舗&オフィスのセキュリティ対策術

alter tableでカラムにCHECK制約を付けて、エラーとなるようなデータをsqlldrでローディングしたのですが、想定通りにエラーとならなくて困っています。
CHECK制約はこのようなものです。
ALTER TABLE TABLE_XXX ADD(
constraint ck_A check (REGEXP_REPLACE(列A, '[0-9]{4}','') = '')
);
列Aの値が半角数字4桁以外のデータはローディングエラー(別ファイルに出力)にしたいのですが、すんなりとテーブルに格納されてしまいます。
ちなみに同様に付けたprimary key制約は正常に機能しているので、正規表現がいけないのでは?と推測しますが。。。
想定通りにするためには、どのように記述したら良いのでしょうか?
正規表現、Oracle共に勉強し始めの為、本など読んでいるのですが、なかなか良い資料が手元になく困っています。
よろしくお願いします。

A 回答 (1件)

正規表現がいけないのではなく、条件の書き方の問題だと思います。


Oracleには空文字はなく、NULLとみなされるため、
REGEXP_REPLACE(列A, '[0-9]{4}','') IS NULL
と書かないといけないということでしょう。
    • good
    • 0
この回答へのお礼

大変遅くなり申し訳ありません。
とても参考になりました。
ありがとうございました。

お礼日時:2009/01/02 01:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!