Я пытался добавить столбец в table, но получил неожиданный эффект с предложением DEFAULT. В таблице с существующими строками я добавил новый столбец, подобный этому:
alter table t add c char(1 char) default 'N' not null;
Когда я впоследствии добавил контрольное ограничение в таблицу, оно не удалось:
alter table t add constraint chk check(c in ('N', 'Y'));
В результате чего
ERROR at line 1:
ORA-02293: cannot validate (T.CHK) - check constraint violated.
Другая информация:
- Поскольку я устанавливаю единиц явно (, т. е. char(1 char), а не просто char(1)), я не ожидаю, что значение семанатики nls_length_будет релевантным.
- После добавления столбца как char(1 char), вновь добавленные «N» на самом деле являются «N», и я не уверен, что такое дополнительные пробелы.
- Добавление столбца как char(1 byte)работает как положено;
- Добавление столбца без значения «N по умолчанию, не равное NULL» с последующим обновлением всех существующих строк до «N» с последующим изменением столбца на «не NULL» также работает должным образом.
- NLS_CHARACTERSET — это AL32UTF8, но я не ожидаю, что это тоже будет актуально.
- База данных — Oracle 11g; 11.2.0.1.0.
Спасибо.
задан Ben Hall 26 March 2012 в 16:12
поделиться