从sql存储过程catch块抛出异常不会引发SP1的java层异常,而SP2异常则会引发异常。
当我执行时,两个SP都在SQL Server中提供异常但是从java代码中我没有异常的SP1。
我使用JPA StoredProcedureQuery调用两个SP并使用Hibernate&弹簧。
CREATE PROCEDURE SP1
AS
SET NOCOUNT ON
BEGIN TRY
DECLARE @ErrorMessage AS VARCHAR(MAX)
SELECT 1/0
END TRY
BEGIN CATCH
THROW 50001, @ErrorMessage, 1;
END CATCH
CREATE PROCEDURE SP2
AS
SET NOCOUNT ON
DECLARE @ErrorMessage AS VARCHAR(MAX)
SELECT 1/0
if @@error<>0
GOTO Erro
RETURN
Erro:
THROW 50001, @ErrorMessage, 1;
我已经测试过,如果我在TRY块中使用任何THROW,它会在Java端产生异常,而在CATCH块中则不会。