Смысл применяемого механизма подробно описан в документе
«Как изменить тип поля, длину поля или порядок полей».
David Zvekic:
Приводится пример процедуры, облегчающей изменение текущей длины полей типа CHAR и VARCHAR на новую. Только на ваш риск – будьте осторожны. Если вы укажете новую длину меньше чем текущая, то даже при SELECT будет возникать ошибка "truncation error" – в этом случае придется использовать CAST с достаточной длиной.
Код процедуры производит проверку, действительно ли обновляемое поле является символьным. Проверка основывается на предположении, что только строковые поля имеют заполненым поле RDB$CHARACTER_LENGTH.
Параметры: RELATIONNAME – имя таблицы, содержащей строковое поле. FIELDNAME – имя поля, длину которго нужно изменить.
CREATE PROCEDURE ALTERCHARFIELDLENGTH(
RELATIONNAME VARCHAR(32),
FIELDNAME VARCHAR(32),
NEWLENGTH SMALLINT)
AS
declare variable field_source varchar(32);
begin
select rdb$FIELD_SOURCE from rdb$relation_fields
where
RDB$RELATION_NAME= UPPER(:relationname)
and RDB$FIELD_NAME = UPPER(:fieldname)
into :field_source;
update rdb$fields
set
RDB$FIELD_LENGTH = :newlength,
RDB$CHARACTER_LENGTH = :newlength
where
RDB$FIELD_NAME= :field_source
and RDB$CHARACTER_LENGTH is not null;
end
Внимание! Ни в коем случае не применяйте эту процедуру к полям системных таблиц – вы полностью разрушите вашу базу данных. Обязательно проверьте действие этой процедуры на какой-нибудь тестовой базе данных, перед тем как применять ее на вашей рабочей БД.