Вы можете использовать ограничение CHECK для столбца, чтобы разрешить:
- значения только с цифрами, начинающиеся с «1»
- значения, как если бы они начинались с 'L'
Проверить ограничение будет:
CHECK
(
CASE
WHEN SUBSTR(text,1,1) ='1' THEN
REGEXP_substr(text, '^[[:digit:]]+$')
WHEN SUBSTR(text,1,1) ='L' THEN
text
END IS NOT NULL)
Давайте посмотрим на тестовый пример:
Настройка
SQL> CREATE TABLE t(text VARCHAR2(30));
Table created.
SQL>
SQL> ALTER TABLE t ADD CONSTRAINT t_chk CHECK
2 (
3 CASE
4 WHEN SUBSTR(text,1,1) ='1' THEN
5 REGEXP_substr(text, '^[[:digit:]]+$')
6 WHEN SUBSTR(text,1,1) ='L' THEN
7 text
8 END IS NOT NULL);
Table altered.
SQL>
Тест
SQL> INSERT INTO t VALUES('123');
1 row created.
SQL> INSERT INTO t VALUES('1a');
INSERT INTO t VALUES('1a')
*
ERROR at line 1:
ORA-02290: check constraint (LALIT.T_CHK) violated
SQL> INSERT INTO t VALUES('L12A');
1 row created.
SQL> INSERT INTO t VALUES('A12A');
INSERT INTO t VALUES('A12A')
*
ERROR at line 1:
ORA-02290: check constraint (LALIT.T_CHK) violated
SQL> SELECT * FROM t;
TEXT
------------------------------
123
L12A
SQL>
Таким образом, он разрешил только значения '123'
и 'L12A'
. И он не разрешал значения '1a'
и 'A12A'
. Работает отлично!
person
Lalit Kumar B
schedule
21.04.2015