向列添加检查约束以仅允许将字母值输入到行中
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
我正在创建一个 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