您可以添加以下检查约束:
... check (length(n||'')=11)
这个检查约束非常简单。而且您不必将数据类型从 更改number
为varchar2
,也不必检查输入是否包含数字以外的字符。
我创建了简单的表并检查它是否正常工作:
create table t (n number check (length(n||'')=11));
insert into t values (1234567890); -- 10 digits
=> ORA-02290: check constraint (USER_4_552B1.SYS_C001297489) violated : insert into t values (1234567890)
insert into t values (12345678901);
=> Record Count: 0; Execution Time: 1ms
insert into t values (123456789012); -- 12 digits
=> ORA-02290: check constraint (USER_4_552B1.SYS_C001297489) violated : insert into t values (123456789012)
另一种方法是使用log
base 10:(看起来更复杂)
... check (trunc(log(10,phone_no)) = 10)
如果给定的数字有 11 位,则其log
值为 10.xxxx。