JPA 存储过程抛出异常:无法提取结果集
JPA Stored Procedure throwing exception: could not extract ResultSet
我正在尝试从 azure sql 调用一个基本存储过程,它只返回数字 1,看起来像这样
CREATE PROCEDURE [dbo].[testProc]
@TableName varchar(100)
AS
BEGIN
SET NOCOUNT ON
SELECT 1
END
我有一个 spring 启动应用程序尝试使用 @Query 注释调用存储过程
@Repository
@Transactional
public interface TestDAO extends JpaRepository<TestEntity, Long> {
@Query(value = "CALL testProc(:TableName)", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
}
但是,我得到一个异常,它说
“'@P0' 附近的语法不正确”
和 SQLGrammarException:无法提取结果集。
我不确定如何解决这个问题,我尝试将 @Procedure 与 @NamedStoredProcedureQueries 注释一起使用,它引发了另一个异常,提示“不能将位置参数与命名参数注册混合;”
根据 Azure Sql 的 documentation,您必须使用以下内容调用存储过程
EXECUTE HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar';
-- Or
EXEC HumanResources.uspGetEmployeesTest2 @LastName = N'Ackerman', @FirstName = N'Pilar';
因此在您的情况下,这将被翻译为
@Query(value = "EXECUTE testProc :TableName", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
或
@Query(value = "EXEC testProc @TableName = :TableName", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
因此考虑到您使用本机查询,
exception which says "Incorrect syntax near '@P0'" and
SQLGrammarException: could not extract ResultSet.
指的是 sql 语法的错误使用,您不使用 execute 或 exec 并且还以 Azure SQL 所不期望的方式传递参数。
我正在尝试从 azure sql 调用一个基本存储过程,它只返回数字 1,看起来像这样
CREATE PROCEDURE [dbo].[testProc]
@TableName varchar(100)
AS
BEGIN
SET NOCOUNT ON
SELECT 1
END
我有一个 spring 启动应用程序尝试使用 @Query 注释调用存储过程
@Repository
@Transactional
public interface TestDAO extends JpaRepository<TestEntity, Long> {
@Query(value = "CALL testProc(:TableName)", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
}
但是,我得到一个异常,它说 “'@P0' 附近的语法不正确” 和 SQLGrammarException:无法提取结果集。
我不确定如何解决这个问题,我尝试将 @Procedure 与 @NamedStoredProcedureQueries 注释一起使用,它引发了另一个异常,提示“不能将位置参数与命名参数注册混合;”
根据 Azure Sql 的 documentation,您必须使用以下内容调用存储过程
EXECUTE HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar';
-- Or
EXEC HumanResources.uspGetEmployeesTest2 @LastName = N'Ackerman', @FirstName = N'Pilar';
因此在您的情况下,这将被翻译为
@Query(value = "EXECUTE testProc :TableName", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
或
@Query(value = "EXEC testProc @TableName = :TableName", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
因此考虑到您使用本机查询,
exception which says "Incorrect syntax near '@P0'" and SQLGrammarException: could not extract ResultSet.
指的是 sql 语法的错误使用,您不使用 execute 或 exec 并且还以 Azure SQL 所不期望的方式传递参数。