通过 JMeter 调用 DB2 存储过程时出现语法错误

Posted

技术标签:

【中文标题】通过 JMeter 调用 DB2 存储过程时出现语法错误【英文标题】:Syntax Error While Calling DB2 Stored Procedure Through JMeter 【发布时间】:2016-10-19 18:06:39 【问题描述】:

我试图调用一个 DB2 存储过程,它有两个输入参数(时间戳,两者)和一个输出参数(整数)。我正在尝试从 JMeter JDBC Sampler 执行此操作并获取 sql 语法异常。

Response code: 42884 -440
Response message: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=PROCEDURE;DEVSCHEMA.GET_ROW_COUNT, DRIVER=4.19.26

Response headers:
1272084586, URL=jdbc:db2://<db2IP>:<port>/DB2T, UserName=<someUserName>, IBM Data Server Driver for JDBC and SQLJ 

从 IBM 文档中我了解到,当存储过程不存在时会发生此错误 - 不是这种情况,模式名称不正确 - 也不是这种情况,参数数量不匹配 - 我验证了这一点,但我是在这一点上值得怀疑,因为 JMeter 提供了要填写的单独字段,并且在其中一个字段中我可能传递了不正确的值。

我对 JMeter 了解不多,但在 apache JMeter 文档的帮助下,我为示例字段设置了以下值。

Query Type: Callable Statement 
Query: CALL DEVSCHEMA.GET_ROW_COUNT(?,?,?)
Parameter Values: $__time(yyyy-MM-dd HH:mm:ss,),$__time(yyyy-MM-dd HH:mm:ss,),0 
Parameter Types: IN TIMESTAMP,IN TIMESTAMP,OUT INTEGER 
Variable Names:VARCOUNT 
Handle ResultSet: Store as a String

谁能找出我在哪里犯了错误?非常感谢。

【问题讨论】:

我对原因的第一个猜测是混合大小写的模式名称;尝试DEVSCHEMA 而不是devSchema @mustaccio 不,这只是我输入的任何名称,因为实际模式名称太长并且仅大写。无论如何,我也刚刚编辑了问题。 【参考方案1】:

问题已解决。从字面上看,这是我从未想过的另一件事。当我尝试使用 Java 代码访问同一个 SP 时遇到同样的错误时,我联系了编写存储过程的 DB2 团队。问题在于SP。根据他们的说法,execute 获得了访问权限,因此在到处钻探之后,他们更愿意创建一个可以正常工作的新 SP。其他一切从 JMeter 方面都很完美。

【讨论】:

以上是关于通过 JMeter 调用 DB2 存储过程时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章

通过 DB2OLEDB 执行存储过程时收到 -379 的 SQLCode

如何删除 DB2 Java 存储过程?

使用spring从db2数据库调用存储过程到java代码

DB2 不指定Schema调用存储过程失败 SQLCODE=-440, SQLSTATE=42884

db2存储过程

从客户端调用 DB2 外部存储过程失败并显示 CPF9810