如何更改firebird3中的列类型

时间:2018-01-15 16:34:56

标签: 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')

因为我收到ISC错误335545030。

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

2 个答案:

答案 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手册

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

 ALTER TABLE tabname ALTER COLUMN colname TYPE typename