我正在创建一个表,并希望向两个列添加一个检查约束,以便只能将字母值插入到列中。这是创建的表:
CREATE TABLE PERSON
(
Forename VARCHAR(30) NOT NULL,
Surname VARCHAR(30) NOT NULL
);
forename和surname列应仅允许插入字母值。我已经尝试了这两个不同的检查约束,但它们不起作用,因为我仍然可以在forename列中插入数字值:
CONSTRAINT FN_LETTERS_ONLY_CK CHECK(FORENAME NOT LIKE ‘%’ +’[^A-Z]’+’%’),
CONSTRAINT FN_LETTERS_ONLY CHECK(REGEXP_LIKE(FORENAME, ‘^[[:ALPHA:]]+$’))
答案 0 :(得分:0)
你的正则表达式尝试看起来几乎是正确的,除了你有大写ALPHA
这会导致插入错误(ORA-12729:正则表达式中的无效字符类),你用卷曲引号显示它防止它被创建。
CREATE TABLE PERSON
(
Forename VARCHAR(30) NOT NULL,
Surname VARCHAR(30) NOT NULL,
CONSTRAINT FN_LETTERS_ONLY CHECK(REGEXP_LIKE(FORENAME, '^[[:alpha:]]+$')),
CONSTRAINT SN_LETTERS_ONLY CHECK(REGEXP_LIKE(SURNAME, '^[[:alpha:]]+$'))
);
然后测试:
SQL> insert into person values ('abc','xyz');
1 row created.
SQL> insert into person values ('ab1c','xyz');
insert into person values ('ab1c','xyz')
*
ERROR at line 1:
ORA-02290: check constraint (MY_SCHEMA.FN_LETTERS_ONLY) violated
SQL> insert into person values ('abc','xy2z');
insert into person values ('abc','xy2z')
*
ERROR at line 1:
ORA-02290: check constraint (MY_SCHEMA.SN_LETTERS_ONLY) violated