首页 > 解决方案 > 如何在 DB2/400 中创建生成的列

问题描述

我想创建一个将两列连接到 1 的虚拟列。我的尝试是:

--result sqlstate 42601 -104 (Token not valid: (. Valid token: IDENTITY)
alter table schema.table
  add column name1_v generated always as (trim(name1) || ' ' || trim(vt_alt))
  add column vtKuTx_v generated always as (trim(vtKuTx) || ' ' || trim(vt_alt))
;

这应该根据文档工作。(https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/db2/rbafzpdf.pdf?view=kc)(第 851 页)。有谁知道如何完成这项工作?

提前致谢。

编辑:我仔细检查了它。这也不起作用。

create or replace table table.schema (
  number int default 2,
  square int generated always as (number * number)
);

标签: sqldb2db2-400

解决方案


在寻求帮助时,请始终提供您的 Db2 版本(或者在本例中为 i 系列的版本)。

当您使用 Db2 for i 时,您应该研究ALTER TABLE for that i series platform 的文档,然后在该页面上选择正确版本的 i series 软件。

对于ALTER TABLEi 系列文档的 GENERATED 子句,在注释 5 中指定了以下限制:

5 仅当列具有 ROWID 数据类型(或基于 ROWID 数据类型的不同类型)、列是标识列、指定标识选项、as-row-transaction-timestamp- 时才能指定 GENERATED指定了子句,指定了 as-row-transaction-start-id-clause,或者该列是行更改时间戳。

这可能是您的 -104 异常的原因。因此,您需要找到一种替代方法来实现您的目标。


推荐阅读