应该这样写吧.phone char(7) check(phone like '[0-9]{9}'));

解决方案 »

  1.   

    错了,phone char(7) check(phone like '[0-9]{7}'));
      

  2.   

    我用那两种方式创建表的时候都没有错误,我只是想知道这两种check约束有什么不同,怎么验证它们的不同:
    phone char(7) check(phone like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'));
    phone char(7) check(phone like '[0-9]'));谢谢!!
      

  3.   

    我只在java里用过正则表达式,
    [0-9][0-9][0-9][0-9][0-9][0-9][0-9] :7个数字组成
    [0-9]: 数字
    这里就是验证存储在表中的字段格式
      

  4.   

    比如还可以like '[a-z][a-z][a-z][1-9][0-9][0-9][0-9][0-9]'
    就是字母和数字都有
      

  5.   

    [0-9]:  有一个数字就可以
    -------你的意思是说,7个字符只要有一个数字就可以?那样的话,我输入:insert into teacher2 values('01','Tom','YanTai','1234Ab7');在这种check约束下就不会产生错误了呀
      

  6.   

    我没试过,只是一起探讨,
    insert into teacher2 values('01','Tom','YanTai','1')
    insert into teacher2 values('01','Tom','YanTai','4')//
    看可以不?可以再'123',如果不行,那就是只能输入一个数字
      

  7.   

    不可以:
    SQL> insert into teacher2 values('01','Tom','YanTai','1');
    insert into teacher2 values('01','Tom','YanTai','1')
    *
    ERROR 位于第 1 行:
    ORA-02290: 违反检查约束条件 (GRACE.SYS_C003054)
      

  8.   

    你的数据库是什么版本?我在10.1.0.2下测试,check不支持正则表达式。
    C:\>sqlplus test/testSQL*Plus: Release 10.1.0.2.0 - Production on 星期三 2月 22 17:08:26 2006Copyright (c) 1982, 2004, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
    With the Partitioning, OLAP and Data Mining optionsSQL> drop table test;Table dropped.SQL> create table test(c1 char(7) check(c1 like '[0-9]%'));Table created.SQL> insert into test values('11');
    insert into test values('11')
    *
    ERROR at line 1:
    ORA-02290: check constraint (TEST.SYS_C005297) violated
    SQL> insert into test values('[0-9]3');1 row created.
      

  9.   

    奇怪啊!为什么我用第一种方式建的表:
    create table teacher2
    (teacherid char(2) not null primary key,
    teachername char(30) not null,
    address char(30),
    phone char(7) check(phone like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'));插入数据:
    insert into teacher2 values('01','Tom','YanTai','6564678');仍然产生错误呢??到底是哪里的问题呀??
      

  10.   

    check是不支持正则表达式的。因此你的check不能那样写。
      

  11.   

    那要怎么写呢,我怎么设置约束才能使得phone只能输入0-9之间的数字类型的字符??
      

  12.   

    如果想用check来限制只允许是数字字符,可以这样做:
    SQL> create table test(c1 char(7) check (translate(c1,' 0123456789',' ') is null));Table created.SQL> insert into test values('1234567');1 row created.SQL> insert into test values('123456');
    insert into test values('123456')
    *
    ERROR at line 1:
    ORA-02290: 违反检查约束条件 (TEST.SYS_C003058)
    SQL> insert into test values('123a456');
    insert into test values('123a456')
    *
    ERROR at line 1:
    ORA-02290: 违反检查约束条件 (TEST.SYS_C003058)
    SQL> insert into test values('12  456');
    insert into test values('12  456')
    *
    ERROR at line 1:
    ORA-02290: 违反检查约束条件 (TEST.SYS_C003058)
    SQL> insert into test values('12as456');
    insert into test values('12as456')
    *
    ERROR at line 1:
    ORA-02290: 违反检查约束条件 (TEST.SYS_C003058)
      

  13.   

    不能用like设置吗?只有translate(c1,' 0123456789',' ') is null一种方法吗?
      

  14.   

    这是我在网上找到的:定义 CHECK 约束表达式
      
      当将 CHECK 约束附加到表或列时,必须包括 SQL 表达式。
      
      可以创建简单的约束表达式在简单条件下检查数据;或使用布尔运算符创建复杂的约束表达式以在多种条件下检查数据。例如,假设 authors 表中有一个 zip 列,该列要求 5 位数字的字符串。下面的示例约束表达式确保只允许 5 位数字:
      
      zip LIKE '[0-9][0-9][0-9][0-9][0-9]'看这段话的意思,是可以phone char(7) check(phone like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]')这么写的呀,可是为什么插入不进去数据呢?
      

  15.   

    据我所知,只看到过sqlserver可以这样
      

  16.   

    check是不支持正则表达式的。因此你的check不能那样写。
    -----------------那为什么我建表的时候它不提示错误呢?
      

  17.   

    你是在什么网站上查到的?那是关于什么数据库的?
    --------
    http://cache.baidu.com/c?word=%BF%C9%D2%D4%3B%B4%B4%BD%A8%3B%BC%F2%B5%A5%3B%B5%C4%3B%D4%BC%CA%F8%3B%B1%ED%B4%EF%CA%BD%3B%D4%DA%3B%BC%F2%B5%A5%3B%CC%F5%BC%FE%3B%CF%C2%3B%BC%EC%B2%E9%3B%CA%FD%BE%DD&url=http%3A//www%2Enhbbs%2Enet/csdn/html/040531/20044144947301796%2Ehtml&b=0&a=6&user=baidu
    没提是什么数据库。
      

  18.   

    "check是不支持正则表达式的。因此你的check不能那样写。
    -----------------那为什么我建表的时候它不提示错误呢?"
    那是因为oracle把你所写的做为一个普通的字符串处理了。看我前面的例子。
    SQL> create table test(c1 char(7) check(c1 like '[0-9]%'));Table created.SQL> insert into test values('11');
    insert into test values('11')
    *
    ERROR at line 1:
    ORA-02290: check constraint (TEST.SYS_C005297) violated
    SQL> insert into test values('[0-9]3');1 row created.
      

  19.   

    “没提是什么数据库”,你怎么就在oracle中试呢?数据库有N种,每种都有差异,不能把别的数据库支持的语法都般到oracle中。