DB正则表达式问题,提供DB列的约束

时间:2014-07-07 09:18:06

标签: sql oracle

如何在Oracle DB中创建包含所有数字值的列,但不包括:

我知道解决方案基于一些正则表达式,除了所有值我们都有正则表达式'*'。

1 个答案:

答案 0 :(得分:0)

试试这个:

CREATE TABLE tt (
  b NUMBER,
  CONSTRAINT special_numbers_chk CHECK (TRIM(REGEXP_REPLACE(to_char(b,'99999999999999999'), '[01254]*', '')) IS NULL)
);

INSERT INTO TT VALUES (122);
1 row(s) inserted.

INSERT INTO TT VALUES (123);
ORA-02290: check constraint (XXXX_DVLP.SPECIAL_NUMBERS_CHK) violated

select * from tt;
   b
-------
  122

我使用显式转换为char(指定掩码)以防止sql注入而不依赖于DB环境,因此我需要从转换结果中删除空格以获取null值,这就是为什么我使用TRIM
P.S。:在方括号中指定您的数字序列