如何在Oracle DB中创建包含所有数字值的列,但不包括:
我知道解决方案基于一些正则表达式,除了所有值我们都有正则表达式'*'。
答案 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。:在方括号中指定您的数字序列