【发布时间】:2020-08-25 17:45:53
【问题描述】:
我有一个 db2 表 t1,其中一列是通过使用一个接受两个字符串参数的标量函数来填充的。
function(string foo, string bar)
在准备sql代码如下:
UPDATE t1 SET col1 = function(?, 'foobar') WHERE t1.id = ?
当我现在向准备好的语句添加一个参数时,我收到一个错误,即第一个参数的类型错误。
for (Entry entry : entries) {
preparedStatement.setString(1, entry.getDesc());
preparedStatement.setInt(2, entry.getId());
}
我已经尝试将第一个参数用单引号括起来,但这不起作用。有没有其他人遇到过这个问题并找到了解决方案? 主要问题是我现在确定 db2 引擎如何为标量函数准备第一个字符串参数,以便首先抛出错误。
【问题讨论】:
-
PreparedStatement 接口有
set<Datatype>函数,有 2 或 3 个参数,第一个是int- parameterIndex。为什么你尝试使用只有一个参数的set<Datatype>函数? -
抱歉,打错了。
-
尝试
function(cast(? as varchar(xxx)), 'foobar'),其中xxx是函数的第一个字符串参数的相应长度,并提供您从 Db2 获得的准确错误代码和消息。在这种情况下,函数的第一个参数必须是varchar数据类型。如果它的第一个参数是另一种数据类型,则使用对应的cast和set<Datatype>。 -
演员已经做到了。谢谢。您想将其添加为答案吗?