我正在尝试将生成的列添加到 IBM DB2 V7R3 中的表中:
ALTER TABLE MYLIB.MYTABLE
ADD COLUMN NEW_COL VARCHAR(255) GENERATED ALWAYS AS (
COALESCE(
CASE
WHEN ENV = 'A' THEN (SELECT GUIDE_URL FROM MYLIBA.PROGRAM WHERE CODE = PGM)
WHEN ENV = 'B' THEN (SELECT GUIDE_URL FROM MYLIBB.PROGRAM WHERE CODE = PGM)
ELSE (SELECT GUIDE_URL FROM MYLIBC.PROGRAM WHERE CODE = PGM)
END
, URL
)
)
但它给出了以下错误:
SQL 状态:42601 供应商代码:-199 消息:[SQL0199] 不需要关键字 WHEN。有效令牌: . ACCTNG 用户 ID 应用程序名称 程序 WRKSTNNAME。原因 。。。。。:此处不需要关键字 WHEN。在关键字 WHEN 处检测到语法错误。有效令牌的部分列表是 。ACCTNG 用户 ID 应用程序名称 程序 WRKSTNNAME。此列表假定语句在意外关键字之前都是正确的。该错误可能出现在语句的前面,但到目前为止该语句的语法似乎是有效的。恢复 。。。:检查指定关键字区域的SQL语句。冒号或 SQL 分隔符可能会丢失。SQL 要求保留字在用作名称时进行分隔。更正 SQL 语句并再次尝试请求。
难道我做错了什么?或者在 7.3 中创建这样的生成列是不可能的吗?升级到 7.5 有帮助吗?我试图找到有关可以在哪些版本中生成哪些生成的列的详细信息,但在文档中找不到任何内容。
生成表达式只能引用特殊寄存器或内置全局变量,如文档中所示(搜索“as- generated-expression-clause”);似乎不允许函数调用或复杂表达式。
这在 7.5 中似乎也没有改变。
我想您将不得不通过触发器来填充此列。