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

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Drago82
Сообщения: 8
Зарегистрирован: 11 окт 2005, 10:28

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

Сообщение Drago82 » 11 окт 2005, 10:37

Имеется таблица 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'));

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 11 окт 2005, 14:05

_Любое_ ковыряние системных таблиц небезопасно. А что, сервер настолько стар что не понимает ALTER TABLE ALTER field?

Drago82
Сообщения: 8
Зарегистрирован: 11 окт 2005, 10:28

Сообщение Drago82 » 12 окт 2005, 04:16

имеется множество хранимых процедур, которые используют это поле. Alter table alter field не проходит.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 12 окт 2005, 08:23

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

Drago82
Сообщения: 8
Зарегистрирован: 11 окт 2005, 10:28

Сообщение Drago82 » 12 окт 2005, 08:48

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

Ответить