[英]How to allow letters only in VARCHAR2 column (Oracle SQL)
I have a column "surname" in my Oracle SQL database. 我的Oracle SQL数据库中有一个“surname”列。
CREATE TABLE test ( id VARCHAR2(3) PRIMARY KEY, surname VARCHAR2(10)); CREATE TABLE test(id VARCHAR2(3)PRIMARY KEY,surname VARCHAR2(10));
What should I add in the query above, to allow inserting only alphabetical characters in a "surname"? 我应该在上面的查询中添加什么,以便只允许在“姓”中插入字母字符?
You need to have a CHECK constraint
in your table. 您需要在表中使用CHECK constraint
。
The following should suffice CHECK (regexp_like(surname,'^[[:alpha:]]+$'))
. 以下应该足够CHECK (regexp_like(surname,'^[[:alpha:]]+$'))
。 Where [[:alpha:]]
is alphabet character class. 其中[[:alpha:]]
是字母字符类。 Thus, only considers the alphabets. 因此,只考虑字母表。
Let's see a test case - 让我们看一个测试用例 -
SQL> CREATE TABLE TEST(
2 surname VARCHAR2(10),
3 CONSTRAINT constraint_name CHECK (regexp_like(surname,'^[[:alpha:]]+$'))
4 )
5 /
Table created.
SQL>
SQL> INSERT INTO TEST values ('LALIT')
2 /
1 row created.
SQL>
SQL> INSERT INTO TEST values ('123')
2 /
INSERT INTO TEST values ('123')
*
ERROR at line 1:
ORA-02290: check constraint (LALIT.CONSTRAINT_NAME) violated
SQL>
So far it works good. 到目前为止它运作良好。 Let's check with Alphanumeric
values. 我们用Alphanumeric
值来检查。
SQL> INSERT INTO TEST VALUES ('LALIT123')
2 /
INSERT INTO TEST VALUES ('LALIT123')
*
ERROR at line 1:
ORA-02290: check constraint (LALIT.CONSTRAINT_NAME) violated
SQL>
SQL> SELECT * FROM TEST
2 /
SURNAME
----------
LALIT
SQL>
So, the CHECK
constraint ONLY allows the alphabets
. 因此, CHECK
约束仅允许alphabets
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.