Sql 如何在DB2/400中创建生成的列

Sql 如何在DB2/400中创建生成的列,sql,db2,db2-400,Sql,Db2,Db2 400,我想创建一个虚拟列,将两列连接到1。我的尝试是: ——结果sqlstate 42601-104(令牌无效:(.有效令牌:标识) altertableschema.table 添加列名称1_v始终生成为(trim(name1)| |“| | trim(vt_alt)) 添加列vtKuTx_v始终生成为(trim(vtKuTx)| |“| | trim(vt_alt)) ; 这应根据文件(第851页)进行。 有人知道怎么做吗 提前谢谢 编辑: 我仔细检查了一下,这也不行 创建或替换table.sc

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

——结果sqlstate 42601-104(令牌无效:(.有效令牌:标识)
altertableschema.table
添加列名称1_v始终生成为(trim(name1)| |“| | trim(vt_alt))
添加列vtKuTx_v始终生成为(trim(vtKuTx)| |“| | trim(vt_alt))
;
这应根据文件(第851页)进行。 有人知道怎么做吗

提前谢谢

编辑: 我仔细检查了一下,这也不行

创建或替换table.schema(
数字int默认值为2,
生成的平方整数始终为(数字*数字)
);
试试:

ALTER TABLE schema.table
  ADD COLUMN name1_v  DEFAULT trim(name1) || ' ' || trim(vt_alt)
  ADD COLUMN vtKuTx_v DEFAULT trim(vtKuTx) || ' ' || trim(vt_alt)
;
在这里,我找到了一个教程。。。
注意:这个答案适用于DB2LUW,而不是DB2-400。可能同样的推理也适用。

DB2阻止您无意中添加列,因为这可能是一个非常繁重的操作

  • 禁用约束
  • 添加列
  • 再次启用约束
正如DB2 SQL编译器开发人员所说(sic):

添加/更改生成的列是唯一的表操作 它会在物理上更新表。更准确地说,它可能 更新它的所有无数行(在有射程的毒蛇中可能很多) 分区)

因此,与其完全填满人们的日志空间(或强调 自动存档选项)我们决定执行这样的操作是合适的 表处于检查挂起状态时的繁重操作

因此,您可以按如下方式执行:

set integrity for schema.table off;

alter table schema.table
  add column name1_v generated as (trim(name1) || ' ' || trim(vt_alt))
  add column vtKuTx_v generated as (trim(vtKuTx) || ' ' || trim(vt_alt))
;

set integrity for schema.table immediate checked force generated;

请参阅上的运行示例。

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

在使用DB2fori时,应该研究该i系列平台的文档,然后在该页面上选择i系列软件的正确版本

对于
ALTER TABLE
的生成子句,i系列文档在注释5中规定了以下限制:

仅当列具有ROWID数据类型时,才能指定生成的5 (或基于ROWID数据类型的不同类型),列为 标识列,指定标识选项, 由于指定了行事务时间戳子句, 指定了行事务起始id子句,或列为 行更改时间戳


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

错误消息是什么?令牌无效:(.valid-Token:IDENTITYWhat是i-series的版本?对于Db2-for-i,记录了以下限制“仅当列具有ROWID数据类型(或基于ROWID数据类型的不同类型)、列是标识列、标识选项被指定、行事务时间戳子句被指定、行事务开始id子句被指定或列是行更改时间戳时,才能指定生成的。"我在7.2和7.4上进行了测试。错误消息的值差别不大。7.4等待一个特殊寄存器7.2标识。尝试得不错,但在更新name1时它不会更新列。我想它与我使用的所有DBMS一样工作。向表中添加列是DDL操作。修改表中给定行中给定列的内容是DML操作。还有其他数据库具有刷新功能,在触发时将源列中的更改反映到目标列。或者,您可以引入一个在更新源列时触发的触发器。但是,如果您只想使用表定义执行此操作,您所能做的就是更改表…删除列…和ALTER TABLE…再添加列…触发器将是一个很好的解决方案。这些列将包含我们BI系统的累积数据。因此,我决定为导入者创建一个视图,使嵌入的语句尽可能简单。它不起作用。但感谢db FIDLE链接,我不知道该网站。