Как изменить тип столбца в firebird3

поскольку firebird 3 я не могу изменить тип столбца

прежде чем я использую этот вид обновления :

update RDB$RELATION_FIELDS set
RDB$FIELD_SOURCE = 'MYTEXT'
where (RDB$FIELD_NAME = 'JXML') and
(RDB$RELATION_NAME = 'XMLTABLE')

потому что я получаю ошибку ISC 335545030.

может быть, есть другой способ в firebird 3 ?

2 ответов


Firebird 3 больше не разрешает прямые обновления системных таблиц, так как это был способ потенциально повредить базу данных. См. также системные таблицы теперь доступны только для чтения в пресс-релизе. Для изменения потребуется использовать инструкции DDL.

похоже, вы хотите изменить тип данных столбца к домену. Вам нужно будет использовать alter table ... alter column ... для этого. Конкретно вам нужно будет делать:

alter table XMLTABLE
    alter column JXML type MYTEXT;

Это связано с некоторым ограничения:

изменение типа данных столбца: Ключевое слово TYPE

тип ключевого слова изменяет тип данных существующего столбца на другой допустимый тип. Изменение типа, которое может привести к потере данных будет запрещено. В качестве примера приведем количество символов в новой тип для столбца CHAR или VARCHAR не может быть меньше существующего спецификация для него.

Если столбец был объявлен как массив, никаких изменений в его тип или его допускается количество измерений.

тип данных столбца, участвующего во внешнем ключе, первичная ограничение key или unique не может быть изменено вообще.

эта инструкция была доступна еще до Firebird 1 (InterBase 6.0).


СУБД Firebird 2.5 руководство

https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-ddl-tbl.html

 ALTER TABLE tabname ALTER COLUMN colname TYPE typename