Смысл применяемого механизма подробно описан в документе "Как изменить тип поля, длину поля или порядок полей".
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
Ни в коем случае не применяйте эту процедуру к полям системных таблиц
- вы полностью разрушите вашу базу данных.
Обязательно проверьте действие этой процедуры на какой-нибудь тестовой
базе данных, перед тем как применять ее на вашей рабочей БД.