2016-04-18 7 views
0

私はすでにデータが豊富なテーブルを持っていますが、私はstudentfnameという名前の属性に文字を入力できるように制約を追加しようとしています。私は様々な異なるREGEXPを試しましたが、それらを挿入するときにエラーを出すことなく動作するようには見えません。Oracle Constraint Letters Only SQL REGEXP

これは構文エラーかどうかわかりません。

編集:ここに私が試したものであり、エラーは私が取得しています:

ALTER TABLE STUDENT 
ADD CONSTRAINT 
check_name 
CHECK(regexp_like(studentfname,'^[A-Za-z''-]+$')); 

エラー:

QL Error: ORA-02293: cannot validate (JEIGH7.CHECK_NAME) - check constraint violated 
02293. 00000 - "cannot validate (%s.%s) - check constraint violated" 
*Cause: an alter table operation tried to validate a check constraint to 
      populated table that had nocomplying values. 
*Action: Obvious 
+1

制約を追加するために使用した完全なステートメントと、制約の作成またはデータの挿入のエラーを含め、試した内容を表示するために質問を編集してください。パターンに一致しない既存のデータがありますか?もしそうなら、あなたは何をしたいのですか?そのデータを修正するか、制約を無視しますか? –

+0

こんにちは、私はすべての既存のデータをチェックしており、どのパターンもパターンと一致しません。 –

+3

明らかに**検証しない行が少なくとも1行あります。私は無効なデータがないことをあなたの主張よりもOracleが信じています。 –

答えて

1

どうやらあなたが任意の非整数かどうかを確認するために、クエリの下にこれを実行しようとすることができますがデータは上記の列にあり、チェック制約を適用できません。このクエリの出力を取得したら、行を更新/削除してから制約を適用してください。お役に立てれば。

SELECT studentfname nm FROM STUDENT a 
WHERE NOT regexp_like(a.nm,'^[A-Za-z''-]+$'); 
+1

あなたの答えは良いです(と私はupvoted)が、私はサブクエリを使用している理由はわかりません。それは必要ではなく、OPを混乱させる可能性があります。 –

+0

私は悪いです。私は投稿中何か考えていた。私はそれを是正します。キャッチをありがとう。 –

+0

ありがとうございました、入力されたデータの後にスペースがいくつかあり、すべてソートされていました。 –