create table t1
(
  编号 varchar(10) not null check(regexp_like(编号,'[0-9][0-9][0-9][0-9]')) , //约束只能输入4位数字
  姓名 varchar(20) not null
)表创建成功以后,
执行一下语句:
1、
insert into t1 values('21','aa');
返回错误,违反约束条件。
2、
insert into t1 values('1221','Aaa');
执行成功!
3、
insert into t1 values('12321','Daa');
执行成功!我创建的表中有约束条件,约束只能输入4位数字,为什么能输入5位呢?
是我写错了还是怎么个情况,求高手帮忙……

解决方案 »

  1.   

    也能输入5位、6位、……愁死我了……求高手帮忙&……
      

  2.   

    -- 既然只允许4位数字,那么你设置varchar2(4)就OK啦,例如:
    C:\Documents and Settings\Administrator>sqlplus /nologSQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 14 08:35:19 2011Copyright (c) 1982, 2005, Oracle.  All rights reserved.idle> conn scott/bee56915
    已连接。
    scott@TBWORA> create table t1
      2  (
      3    编号 varchar2(4) not null check(regexp_like(编号,'[0-9][0-9][0-9][0-9]')), /* 约束只能输入4位数字 */
      4    姓名 varchar2(20) not null
      5  );表已创建。scott@TBWORA> insert into t1(编号,姓名) values('00001','罗有谋');
    insert into t1(编号,姓名) values('00001','罗有谋')
                                         *
    第 1 行出现错误:
    ORA-12899: 列 "SCOTT"."T1"."编号" 的值太大 (实际值: 5, 最大值: 4)
    scott@TBWORA> insert into t1(编号,姓名) values('0001','罗有谋');已创建 1 行。scott@TBWORA> insert into t1(编号,姓名) values('Z001','罗有谋');
    insert into t1(编号,姓名) values('Z001','罗有谋')
    *
    第 1 行出现错误:
    ORA-02290: 违反检查约束条件 (SCOTT.SYS_C005367)
      

  3.   


    create table t1
    (
      编号 varchar(10) not null check(regexp_like(编号, '^\d{4}$')) , --约束只能输入4位数字
      姓名 varchar(20) not null
    )
      

  4.   


    regexp_like(编号, '^[a-zA-Z]{4}$')