我在运行下面的
时在windows上得到以下异常ERROR: operator does not exist: numeric = character varying提示:没有匹配给定名称和参数类型的操作符。在使用查询参数
执行时,可能需要添加显式类型强制转换。
我将使用函数作为命名参数的数字字符串传递给查询
getUIDCount(String id) {
...
select count(UID) as icrd FROM UID_tbl WHERE id = ?
...
}
where id is numeric(5,0)" in table
在Ubuntu上运行良好,但在windows上运行相同的代码时会出现错误。我必须对窗口进行显式强制转换。我使用的是PostgreSQL 9.4.3。我使用的是"org.hibernate.dialect"。postgresql:postgresql:9.3-1100-jdbc41'
更新了它如何被调用
def Integer getUIDSetSize(String _id)
{
Integer i = 0;
Sql sql = new Sql(dataSource);
String sqlt = """select count(UID) as icrd FROM UID_tbl WHERE _id = ?""";
log.trace(sqlt);
sql.eachRow(sqlt, [_id], { row -> i = row.icrd; });
return i;
}
def _id1 = params._id1;count1 = HelperService.getUIDSetSize(_id1)
从varchar转换为numeric的解决方法是
CREATE CAST(VARCHAR AS NUMERIC) WITH INOUT AS IMPLICIT;
这不是最好的解决方案,建议从代码中选择强制转换。