如何在HSQLDB中更改UDT?

如何在HSQLDB中更改UDT?,hsqldb,Hsqldb,在HSLQDB v 2.3.1中,有一个create type子句用于定义UDT。但就文档而言,似乎没有ALTERTYPE子句,如果我尝试此操作,db将返回一个意外的令牌错误 是否可以在HSQLDB中修改/删除UDT?例如,如果我最初创建了 create type CURRENCY_ID as char(3) 因为我决定使用ISO代码。但后来我决定将代码存储为整数。在我的数据库中修改模式的最佳方式是什么?这是一个合成的例子,显然我不会在这个例子中使用整数 我想我会的 alter table i

在HSLQDB v 2.3.1中,有一个create type子句用于定义UDT。但就文档而言,似乎没有ALTERTYPE子句,如果我尝试此操作,db将返回一个意外的令牌错误

是否可以在HSQLDB中修改/删除UDT?例如,如果我最初创建了

create type CURRENCY_ID as char(3)
因为我决定使用ISO代码。但后来我决定将代码存储为整数。在我的数据库中修改模式的最佳方式是什么?这是一个合成的例子,显然我不会在这个例子中使用整数

我想我会的

alter table inventory alter column ccy set data type int
drop type CURRENCY_ID
create type CURRENCY_ID as int
alter table inventory alter column ccy set data type CURRENCY_ID

但是有更好的方法吗?

在尝试了各种方法之后,我最终编写了一个脚本来直接编辑数据库的*.script文件。它是一个纯文本文件,包含以编程方式重新创建DB的SQL命令。详细内容:

打开数据库,关闭压缩 编辑脚本文件:替换类型定义,例如,将类型XXX创建为int,将类型XXX创建为char4 对于每个表,将插入值替换为表XXX值i,。。。在表XXX中插入值'str',。。。。这是通过一个脚本完成的,该脚本具有从旧int值到新char值的映射。 在我的特殊情况下,我正在更改主键,因此我必须从CREATETABLE语句中删除identity指令,并且还必须删除包含alter table XXX alter column YYY restart sequence 123的行。 保存并关闭脚本文件,打开数据库,关闭压缩 这不是很好,但它奏效了。优点:

能够重新定义UDT。 能够以编程方式映射表值。 方法是泛型的,可以用于UDT之外的其他模式更改。 缺点

不检查模式是否一致,尽管如果无法读取脚本,它会抛出错误。 将文件作为文本文件读取时很危险。e、 如果我有一个带有换行符的VARCHAR列呢?当我解析脚本文件并将其写回时,需要对其进行转义。 不确定这是否适用于非内存DBs。i、 e.关闭时不只有*.script文件的。 对于大型数据库,可能效率不高。我的分贝很小~1MB。
看起来你实际上是在寻找一个域而不是一个新的数据类型:顺便说一句:没有版本3.2.1,你是说2.3.1吗?是的,我想你是对的。知道这会如何影响性能吗?i、 e.如果我将类型货币\u ID创建为int,而将域货币\u ID创建为int,而没有任何附加约束?我发现的另一个问题是,在处理UDT时,JDBC规范在域上不如在类型上清晰。。。例如,我在过去提出: