Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅允许VARCHAR2列中的字母(Oracle SQL)_Sql_Regex_Oracle_Constraints - Fatal编程技术网

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

如何仅允许VARCHAR2列中的字母(Oracle SQL),sql,regex,oracle,constraints,Sql,Regex,Oracle,Constraints,我在Oracle SQL数据库中有一列“姓氏” 创建表测试( id VARCHAR2(3)主键, 姓VARCHAR2(10)) 我应该在上面的查询中添加什么,以允许在“姓氏”中只插入字母字符?您的表中需要有一个检查约束 以下内容应足以检查(regexp_like(姓氏,'^[:alpha:]+$)。其中[[:alpha:][]是字母字符类。因此,只考虑字母表 让我们看一个测试用例- SQL> CREATE TABLE TEST( 2 surname VARCHAR2(10), 3

我在Oracle SQL数据库中有一列“姓氏”

创建表测试( id VARCHAR2(3)主键, 姓VARCHAR2(10))


我应该在上面的查询中添加什么,以允许在“姓氏”中只插入字母字符?

您的表中需要有一个
检查约束

以下内容应足以检查(regexp_like(姓氏,'^[:alpha:]+$)
。其中
[[:alpha:][]
是字母字符类。因此,只考虑字母表

让我们看一个测试用例-

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>
到目前为止效果不错。让我们检查
字母数字

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>

因此,
CHECK
constraint只允许
字母表

我试过:CHECK(姓氏像“%[^a-zA-Z]”);但当我有一个错误“ORA-02290:check constraint(DBNAME.SYS_C00157564)违犯”时,即使我插入'Smith'作为姓氏:/Ok,没有问题。检查我的答案。我可以稍后在创建此表时再次使用此约束吗?只需写入约束\u名称?您的意思是要在创建表后添加检查约束?是的,您可以使用
ALTER
语句来实现
altertable TABLE\u name ADD CONSTRAINT\u name CHECK(column\u name condition)
我的意思是,如果我在行
namesvarchar2(10)CONSTRAINT\u name CHECK(regexp_like(姓氏),^[:alpha:][]+$”)之后添加约束(column\u name CHECK)
一行
namesvarchar2(10)CONSTRAINT\u name
,它会与相同的“CHECK”一起工作吗没有键入它吗?不,它不会以这种方式工作。你必须明确地为它们中的每一个写约束条件。你可能要考虑的是姓氏至少在它们中可以有撇号(′)和破折号(-)。在这种情况下,你可能想要使用稍微不同的正则表达式,例如,<代码> ^ [-ZA-Z’-] + $< /代码>。(双单引号的原因是为了在甲骨文字符串中转义)。还要注意带有重音符号的外国姓氏等等!