Ограничение проверки Oracle для типа varray

У меня есть пользовательский тип, определенный следующим образом:

CREATE TYPE myType_t AS VARRAY(2) of char(10);

Можно ли добавить контрольное ограничение для типа char(10), чтобы элементы myType_t соответствовали определенному регулярному выражению? Я пробовал такие вещи, как

CREATE TYPE myType_t AS VARRAY(2) of char(10)
( constraint c_myType_format check ( regexp_like(IdontKnowWhatToWriteHere, '[:digit:]{8}'));

что, очевидно, не работает... Я подумал, может быть, определить другой тип для

AS VARRAY(2) of myOtherType_t

но здесь я снова не знаю, где поставить проверку регулярного выражения.

И да, я также пытался добавить в таблицу ограничение, которое будет использовать мой тип, но я не могу найти правильный синтаксис.


person Pacane    schedule 16.10.2012    source источник
comment
Почему бы не изменить char(10) на number(8)? По общему признанию, это не остановит отрицательные числа, хотя...   -  person Jeffrey Kemp    schedule 17.10.2012
comment
Ну, я думал, что хранить его как число не будет иметь такого же смысла, хотя я знаю, что это было бы возможно.   -  person Pacane    schedule 17.10.2012
comment
Достаточно справедливо - я согласен, что если это на самом деле не число, а строка цифр, лучше не использовать числовой тип данных. В этом случае я бы отказался от TYPE и просто наложил ограничения на столбцы базы данных.   -  person Jeffrey Kemp    schedule 18.10.2012


Ответы (1)


Согласно документации Oracle:

Oracle не поддерживает ограничения для столбцов или атрибутов, тип которых является определяемым пользователем объектом, вложенной таблицей, VARRAY, REF или LOB.

person Pacane    schedule 17.10.2012