2016-11-16 11 views
3

私はOracleだけでなくSQLも新しくなっています。私はOracleと遊んでいた。私は電話番号に制約を設けようとしたので、電話番号は特定の方法でしか挿入できません。以下は Oracleのテーブル内の電話番号のフォーマット

は私のテーブルです:

ALTER TABLE FIRST_TRY 
ADD CONSTRAINT FIRSTTRY_PHONENUMBER CHECK 
(PHONENUMBER LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' 
OR PHONENUMBER LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
OR PHONENUMBER LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'); 

私はこのように、テーブルに値を挿入しています:私はこのような電話番号の制約を置く

CREATE TABLE FIRSTTRY(
USERID CHAR(9) NOT NULL, 
USERNAME VARCHAR(20) NOT NULL, 
EMAILADDRESS VARCHAR(40), 
PHONENUMBER VARCHAR(12), 
PROFILEPICTURE BLOB, 
PRIMARY KEY(USERID) 
); 

INSERT INTO FIRST_TRY VALUES (1,'ABCD','[email protected]','0504562893',NULL); 

しかし、それは私にエラーを与える:

02290. 00000 - "check constraint (%s.%s) violated" 
*Cause: The values being inserted do not satisfy the named check 

*Action: do not insert values that violate the constraint. 

任意のアイデア、提案:ここは誤りですか?

+0

あなたが数字のチェックが、文字列を挿入しているように思えます – Mihai

答えて

1
ALTER TABLE FIRST_TRY 
ADD CONSTRAINT FIRST_TRY_PHONENUMBER 
CHECK (regexp_like (PHONENUMBER,'^(\d{3}-\d{3}-?\d{4}|\d{10})$')) 

INSERT INTO FIRST_TRY VALUES (1,'ABCD','[email protected]','0504562893' ,NULL); 
INSERT INTO FIRST_TRY VALUES (2,'ABCD','[email protected]','050-4562893' ,NULL); 
INSERT INTO FIRST_TRY VALUES (3,'ABCD','[email protected]','050-456-2893',NULL); 
関連する問題