繁体   English   中英

H2 数据库抛出 org.h2.jdbc.JdbcSQLNonTransientException

[英]H2 database throws org.h2.jdbc.JdbcSQLNonTransientException

使用 h2,MODE=Oracle 时出现以下错误。 相同的查询适用于 oracle db 。 我们在测试中使用 h2 db,所以我们希望相同的 sql 同时适用于 oracle 和 h2 。

 org.h2.jdbc.JdbcSQLNonTransientException: Unknown data type: \"OBJECT_KEY\"; SQL statement:\nMERGE INTO TEST_OBJECTS obj USING (select ? as OBJECT_KEY, ? as OBJECT_VALUE, ? as ETAG, ? as CREATED_BY, SYSTIMESTAMP as CREATION_DATE, ? as LAST_UPDATED_BY, SYSTIMESTAMP as LAST_UPDATE_DATE from dual) tmp ON (obj.OBJECT_KEY = tmp.OBJECT_KEY) WHEN MATCHED THEN UPDATE SET obj.OBJECT_VALUE=tmp.OBJECT_VALUE, obj.TAG=tmp.TAG, obj.LAST_UPDATED_BY=tmp.LAST_UPDATED_BY, obj.LAST_UPDATE_DATE=SYSTIMESTAMP WHEN NOT MATCHED THEN INSERT (OBJECT_KEY, OBJECT_VALUE, TAG, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE) VALUES (tmp.OBJECT_KEY, tmp.OBJECT_VALUE, tmp.TAG ,tmp.CREATED_BY, tmp.CREATION_DATE, tmp.LAST_UPDATED_BY, tmp.LAST_UPDATE_DATE)

询问

MERGE INTO TEST_OBJECTS obj USING (select ? as OBJECT_KEY, ? as OBJECT_VALUE, ? as TAG, ? as CREATED_BY, SYSTIMESTAMP as CREATION_DATE, ? as LAST_UPDATED_BY, SYSTIMESTAMP as LAST_UPDATE_DATE from dual) tmp ON (obj.OBJECT_KEY = tmp.OBJECT_KEY) WHEN MATCHED THEN UPDATE SET obj.OBJECT_VALUE=tmp.OBJECT_VALUE, obj.TAG=tmp.TAG,obj.LAST_UPDATED_BY=tmp.LAST_UPDATED_BY, obj.LAST_UPDATE_DATE=SYSTIMESTAMP WHEN NOT MATCHED THEN INSERT (OBJECT_KEY, OBJECT_VALUE, TAG, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE)VALUES (tmp.OBJECT_KEY, tmp.OBJECT_VALUE, tmp.TAG ,tmp.CREATED_BY,tmp.CREATION_DATE, tmp.LAST_UPDATED_BY, tmp.LAST_UPDATE_DATE)

H2 在设置参数之前立即编译准备好的语句,但是该命令需要知道它们的数据类型才能创建派生表。 通常的解决方法是使用强制转换规范包装参数:

(select (CAST ? AS dataType1) as OBJECT_KEY,
CAST(? AS dataType2) as OBJECT_VALUE,
CAST(? AS dataType3) as ETAG,
CAST(? AS dataType4) as CREATED_BY,
SYSTIMESTAMP as CREATION_DATE,
CAST(? AS dataType5) as LAST_UPDATED_BY,
SYSTIMESTAMP as LAST_UPDATE_DATE from dual)

使用真实的数据类型名称而不是dataType* ,您可以从TEST_OBJECTS表中相关列的定义中获取它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM