如何更改firebird3中的列类型

use*_*515 8 firebird firebird-3.0

由于firebird 3我无法修改列类型

在我使用这种更新之前:

update RDB$RELATION_FIELDS set
RDB$FIELD_SOURCE = 'MYTEXT'
where (RDB$FIELD_NAME = 'JXML') and
(RDB$RELATION_NAME = 'XMLTABLE')
Run Code Online (Sandbox Code Playgroud)

因为我得到ISC错误335545030.

也许火鸟3有另一种方式?

Mar*_*eel 6

Firebird 3不再允许直接更新系统表,因为这是一种可能破坏数据库的方法.另请参阅发行说明中的系统表现在是只读的.您将需要使用DDL语句来进行修改.

您似乎想要将列的数据类型更改为域.你需要使用alter table ... alter column ...它.具体来说,您需要做:

alter table XMLTABLE
    alter column JXML type MYTEXT;
Run Code Online (Sandbox Code Playgroud)

这确实有一些限制:

更改列的数据类型:TYPE关键字

关键字TYPE将现有列的数据类型更改为另一个允许类型.将禁止可能导致数据丢失的类型更改.例如,CHAR或VARCHAR列的新类型中的字符数不能小于现有规范.

如果将列声明为数组,则不允许更改其类型或维数.

外键,主键或唯一约束中涉及的列的数据类型根本无法更改.

自Firebird 1(InterBase 6.0)之前就已提供此声明.