sql - 如何在 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)
);
解决方案
在寻求帮助时,请始终提供您的 Db2 版本(或者在本例中为 i 系列的版本)。
当您使用 Db2 for i 时,您应该研究ALTER TABLE for that i series platform 的文档,然后在该页面上选择正确版本的 i series 软件。
对于ALTER TABLE
i 系列文档的 GENERATED 子句,在注释 5 中指定了以下限制:
5 仅当列具有 ROWID 数据类型(或基于 ROWID 数据类型的不同类型)、列是标识列、指定标识选项、as-row-transaction-timestamp- 时才能指定 GENERATED指定了子句,指定了 as-row-transaction-start-id-clause,或者该列是行更改时间戳。
这可能是您的 -104 异常的原因。因此,您需要找到一种替代方法来实现您的目标。
推荐阅读
- session-cookies - aiohttp 和 browser_cookie3
- r - 为什么从 POSIXct 转换时 as.Date() 返回错误的日期?
- flutter - “在颤动中,路线是到屏幕的路径”或“在颤动中,一个屏幕被称为一条路线”
- websocket - 尝试通过 Visual Studio 运行 websocket 应用程序,以便我可以调试它
- python - 了解 GPU 上的 Pytorch 内存分配
- java - 如果简单数组有效,为什么要在 OpenGL (LWJGL) 中使用缓冲区?
- vue.js - NuxtJS Headless ghost 无法查看个别博客
- python - 如何使用 lasio.py 将曲线标题添加到 las.write() 的输出
- karabiner - 如何交换破折号和下划线(karabiner)
- c# - C# 有没有办法在触发计时器时“重新启动”线程?