Поддерживаются ли в Oracle значения по умолчанию для столбцов с символьной семантикой?

Я пытался добавить столбец в 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.

Другая информация:

  1. Поскольку я устанавливаю единиц явно (, т. е. char(1 char), а не просто char(1)), я не ожидаю, что значение семанатики nls_length_будет релевантным.
  2. После добавления столбца как char(1 char), вновь добавленные «N» на самом деле являются «N», и я не уверен, что такое дополнительные пробелы.
  3. Добавление столбца как char(1 byte)работает как положено;
  4. Добавление столбца без значения «N по умолчанию, не равное NULL» с последующим обновлением всех существующих строк до «N» с последующим изменением столбца на «не NULL» также работает должным образом.
  5. NLS_CHARACTERSET — это AL32UTF8, но я не ожидаю, что это тоже будет актуально.
  6. База данных — Oracle 11g; 11.2.0.1.0.

Спасибо.

5
задан Ben Hall 26 March 2012 в 16:12
поделиться