簡體   English   中英

JPA 存儲過程拋出異常:無法提取 ResultSet

[英]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:無法提取 ResultSet。

我不知道如何解決這個問題,我嘗試將@Procedure 與@NamedStoredProcedureQueries 注釋一起使用,它引發了另一個異常,說“不能將位置參數與命名參數注冊混合;”

根據 Azure Sql 的文檔,您必須使用以下內容調用存儲過程

執行 HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar';
- 或者
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);

因此,考慮到您使用本機查詢,

異常顯示“'@P0' 附近的語法不正確”和 SQLGrammarException:無法提取 ResultSet。

指錯誤使用 sql 語法,您不使用 execute 或 exec 並且您還以 Azure SQL 預期的方式傳遞參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM