将检查约束添加到列以仅允许输入到行中的字母值

时间:2018-02-15 09:08:07

标签: oracle check-constraints

我正在创建一个表,并希望向两个列添加一个检查约束,以便只能将字母值插入到列中。这是创建的表:

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:]]+$’))

1 个答案:

答案 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