Страница 1 из 1

Изменение типа поля в таблице, содержащей данные

Добавлено: 11 окт 2005, 10:37
Drago82
Имеется таблица Objects с данными. В ней есть поле NCN типа smallInt. Потребовалось сменить тип этого поля на integer.
Безопасно ли использование следующего кода, может ли это создать какие-то проблемы? Может ли это испортить данные в таблице?

update RDB$FIELDS set
RDB$FIELD_TYPE = 8,
RDB$FIELD_LENGTH=4
where RDB$FIELD_NAME = (select first 1 RDB$FIELD_SOURCE
from RDB$RELATION_FIELDS
where (RDB$RELATION_NAME='OBJECTS')
and (RDB$FIELD_NAME='NCN'));

Добавлено: 11 окт 2005, 14:05
Dimitry Sibiryakov
_Любое_ ковыряние системных таблиц небезопасно. А что, сервер настолько стар что не понимает ALTER TABLE ALTER field?

Добавлено: 12 окт 2005, 04:16
Drago82
имеется множество хранимых процедур, которые используют это поле. Alter table alter field не проходит.

Добавлено: 12 окт 2005, 08:23
Dimitry Sibiryakov
Drago82 писал(а):имеется множество хранимых процедур, которые используют это поле. Alter table alter field не проходит.
Тогда ковыряние таблиц просто уронит базу. До невосстанавливаемого состояния.
Надо дропать все использующие хранимые процедуры, изменять поле и возвращать процедуры обратно.

Добавлено: 12 окт 2005, 08:48
Drago82
дык я ж буду очень осторожно и "правильно" ковырять. И в хранимых процедурах работать с NCN как с integer. Провёл эксперимент на нескольких базах - всё вроде ок... И база живая, и информация не потеряна, и тип благополучно сменился.