由于firebird 3我无法修改列类型
在我使用此类更新之前:
update RDB$RELATION_FIELDS set
RDB$FIELD_SOURCE = 'MYTEXT'
where (RDB$FIELD_NAME = 'JXML') and
(RDB$RELATION_NAME = 'XMLTABLE')
因为我收到ISC错误335545030。
也许火鸟3还有另一种方式?
答案 0 :(得分:5)
Firebird 3不再允许直接更新系统表,因为这是一种可能破坏数据库的方法。另请参阅发行说明中的System Tables are Now Read-only。您需要使用DDL语句进行修改。
看起来您想要将列的数据类型更改为域。您需要使用alter table ... alter column ...
。具体来说,您需要这样做:
alter table XMLTABLE
alter column JXML type MYTEXT;
这确实有一些限制:
更改列的数据类型:TYPE关键字
关键字TYPE将现有列的数据类型更改为 另一种,允许的类型。可能导致数据丢失的类型更改 将被禁止。例如,新的字符数 CHAR或VARCHAR列的类型不能小于现有的类型 它的规范。
如果列声明为数组,则不更改其类型或其类型 允许的尺寸数量。
外键中涉及的列的数据类型,主要 密钥或唯一约束根本无法更改。
此声明自Firebird 1(InterBase 6.0)之前就可用。
答案 1 :(得分:2)
Firebird 2.5手册
ALTER TABLE tabname ALTER COLUMN colname TYPE typename