添加列报错3102 - expression of generated column contains a disallowd function

【 使用环境 】生产环境
【 OB or 其他组件 】ob
【 使用版本 】社区版4.2.1.8
【问题描述】添加列报错3102 - expression of generated column contains a disallowd function
【复现路径】

  1. 创建测试表
    create table test
    (
    id int,
    data json
    )
  2. 写入测试数据
    insert into test values(1,’{“createTime”:1747827711}’);
  3. 添加虚拟列报错3102 - expression of generated column contains a disallowd function
    ALTER TABLE test ADD COLUMN year int GENERATED ALWAYS AS (year(FROM_UNIXTIME(data ->> ‘$.createTime’)) ) VIRTUAL NULL AFTER data;

请问是社区版4.2.1.8这个版本不支持吗?有什么绕行的办法?

2 个赞

求各位专家帮忙解答下,在线等待中

试试这种

请问我的添加列语句和截图上的有什么区别呢?我加了括号也还是一样的错误
ALTER TABLE test ADD COLUMN( year int GENERATED ALWAYS AS (year(FROM_UNIXTIME(data ->> ‘$.createTime’)) ) VIRTUAL );

这个报错表示在定义生成列(虚拟列)时,所使用的表达式中包含了数据库不允许的函数。
确保您在定义虚拟列时,所使用的函数是确定性的纯函数(Pure Function)。例如非确定性函数(如 NOW() , RAND() 等)通常是不被允许出现在虚拟列表达式中的。