Рассмотрим следующую контрольную проверку:
create table channelTable (
...
topicCode varchar(4) not null
check(
substr(c_topicCode, 1, 1) not in ('I', 'O', 'Q', 'V', 'Y', 'Z')
and regexp_like(topicCode, '^[A-Z]\d')
),
...
);
Первое условие гарантирует, что код не начинается с одного из запрещенных символов, второе проверяет, соответствует ли он верхнему алфавиту c, за которым следует число.
Чтобы избежать использования двух условий, альтернативой будет перечисление всех разрешенных символов в первой позиции:
check(regexp_like(topicCode, '^[ABCDEFGHJKLMNPRSTUVWX]\d'))
Это работает в Oracle и в очень последние версии MySQL.