在 MyBatis XML 里写 sysdate 时,只要把它放在匿名块(BEGIN … END;)之外,并且去掉你自己额外包的那层 BEGIN / COMMIT,就能一次性通过;一旦把 sysdate 包到匿名块里,GaussDB/openGauss 会把 sysdate 当成 占位符 $n 的“表达式”,从而要求你给它指定 jdbcType,于是抛出
could not determine data type of parameter $13
下面把原理 + 三种写法 + 验证步骤一次讲清,你照着改即可。
报错根因(简短版)
MyBatis 的 #{} 会被替换成 ?,最后由 JDBC 发送 带类型的参数;
sysdate 不是 #{},它属于 数据库端常量,本不该占一个 ?;
一旦你把它放进 匿名块(BEGIN … END;),GaussDB 的解析器会先把整段文本当成 一个大的 prepared statement 去预编译,于是内部给 sysdate 也分配了一个 $n 占位符,却又找不到类型 → 报错。
把匿名块去掉,MyBatis 直接把 sysdate 作为纯文本拼进 SQL,不再生成额外占位符,自然不报错。

在使用sysdate sysdate:date调用都会在匿名块中提示could not determine date type of parameter 

去掉匿名块begin end后报错消息问题解决

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐