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

Add check constraint to column to only allow alphabetical values to entered into the row

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

CREATE TABLE PERSON
    (
    Forename VARCHAR(30) NOT NULL,
    Surname VARCHAR(30) NOT NULL
    );

名字和姓氏列应该只允许插入字母值。我已经尝试了这两种不同的检查约束,但是它们没有用,因为我仍然可以将数字值插入到名字列中:

CONSTRAINT FN_LETTERS_ONLY_CK CHECK(FORENAME NOT LIKE ‘%’ +’[^A-Z]’+’%’),
CONSTRAINT FN_LETTERS_ONLY CHECK(REGEXP_LIKE(FORENAME, ‘^[[:ALPHA:]]+$’))

你的正则表达式尝试看起来几乎是正确的,除了你有大写 ALPHA 这会导致插入错误(ORA-12729:正则表达式中的无效字符 class),并且你已经用大引号显示它,根本无法创建它。

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