通过 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