9

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

在我使用这种更新之前:

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

因为我收到 ISC 错误 335545030。

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

4

2 回答 2

8

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

看起来您想将列的数据类型更改为域。您将需要使用alter table ... alter column ...它。具体来说,您需要执行以下操作:

alter table XMLTABLE
    alter column JXML type MYTEXT;

这确实有一些限制:

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

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

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

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

此声明在 Firebird 1 (InterBase 6.0) 之前就已经可用。

于 2018-01-15T17:11:48.807 回答
3

火鸟 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
于 2018-01-15T17:13:21.710 回答