简体   繁体   English

如何仅在VARCHAR2列中允许字母(Oracle SQL)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM