存储过程仅应被调用一次而被多次调用

时间:2018-08-01 21:44:33

标签: sql sql-server mybatis

我正在使用MyBatis在Java中工作,以在SQL Server中调用存储过程。此存储过程采用一个参数。在我的代码中,在调用sproc之前,我检查了这些参数是否不为null,并记录了其值。

在我的测试环境中,此方法工作正常且符合预期。不过,当我尝试生产时,我注意到日志正在显示

1 - [INFO] Calling PR_ProcedureName with ParameOneName=validNonNullValue
2 - [ERROR] Error updating database.  Cause: java.sql.SQLException: Procedure or function 'PR_ProcedureName' expects parameter '@@ParamOneName', which was not supplied.
3 - [ERROR] Error updating database.  Cause: java.sql.SQLException: Procedure or function 'PR_ProcedureName' expects parameter '@@ParamOneName', which was not supplied.

当我查看数据库时,可以看到sproc更新了适当的值。因此,它似乎成功运行了一次,然后又在没有提供任何参数的情况下再次触发了两次。

我怀疑随后对proc的错误调用不是由我编写的任何代码触发的,而是由MyBatis映射器触发的。由于应用程序正在获取异常,因此它也不会在数据库级别被触发。

编写我的应用程序的方式,在没有传递有效参数的情况下永远不会调用sproc。

Java中的相关映射器方法:

void callProcedure(@Param("ParamOne") UUID paramOne)

以及相应的XML:

<update id="callProcedure" statementType="CALLABLE" parameterType="Uuid">
{
    CALL dbo.PR_ProcedureName (
        @ParamOne = #{paramOne},
    )
}
</update>

0 个答案:

没有答案