Хранимая процедура для изменения длины строкового поля


Смысл применяемого механизма подробно описан в документе «Как изменить тип поля, длину поля или порядок полей».

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

 
Внимание! Ни в коем случае не применяйте эту процедуру к полям системных таблиц – вы полностью разрушите вашу базу данных. Обязательно проверьте действие этой процедуры на какой-нибудь тестовой базе данных, перед тем как применять ее на вашей рабочей БД. 

Подпишитесь на новости Firebird в России

Подписаться