准备语句中的 IBM DB2 标量函数参数
IBM DB2 Scalar Function Parameters in Prepared Statement
我有一个 db2 table 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 引擎如何为标量函数准备第一个字符串参数,以便首先抛出错误。
尝试function(cast(? as varchar(xxx)), 'foobar')
,其中xxx
函数第一个字符串参数的相应长度。在这种情况下,函数的第一个参数必须是 varchar
数据类型。如果它的第一个参数是另一种数据类型,则使用相应的转换和 set<Datatype>
.
您需要这样做,因为可能有多个具有相同名称和参数数量但具有不同数据类型的函数。并且 Db2 必须知道在查询编译(准备)期间确切使用哪个函数。
我有一个 db2 table 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 引擎如何为标量函数准备第一个字符串参数,以便首先抛出错误。
尝试function(cast(? as varchar(xxx)), 'foobar')
,其中xxx
函数第一个字符串参数的相应长度。在这种情况下,函数的第一个参数必须是 varchar
数据类型。如果它的第一个参数是另一种数据类型,则使用相应的转换和 set<Datatype>
.
您需要这样做,因为可能有多个具有相同名称和参数数量但具有不同数据类型的函数。并且 Db2 必须知道在查询编译(准备)期间确切使用哪个函数。