※ ChatGPTを利用し、要約された質問です(原文:正規表現を使用したCHECK制約)
正規表現を使用したCHECK制約としてデータのローディングエラーを出す方法について
このQ&Aのポイント
質問者は、ALTER TABLE文を使用してカラムにCHECK制約を追加しましたが、想定通りにエラーが出ずに困っています。
質問者は、正規表現を使用して半角数字4桁以外のデータを取り除くCHECK制約を追加したいと考えています。
質問者は、正規表現とOracleの勉強を始めたばかりで、良い資料がなく困っています。
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共に勉強し始めの為、本など読んでいるのですが、なかなか良い資料が手元になく困っています。
よろしくお願いします。
お礼
大変遅くなり申し訳ありません。 とても参考になりました。 ありがとうございました。