我的 SP 确实包含 DELETE 和 INSERT INTO 语句。如果DELETE语句成功,但INSERT INTO不成功,JAVA只会查看第一条语句并得出整个SP执行成功的结论,这可能是错误的。
如果只有一个语句失败,如何执行多个语句并在 JAVA 中得到异常。 我已经在 SQL 中尝试过 TRY-CATCH,但得出的结论是,所有语句均已正确执行,因为第一个语句成功。
这是一个 MS SQL 2008 数据库
ALTER PROCEDURE [testing]
@bikes varchar(8000),
@groupw varchar(4),
@name char(6)
AS
BEGIN
DELETE CP_customer_kngr_corr_s WHERE knid in ('blue')
DECLARE @pos INT
DECLARE @len INT
DECLARE @value varchar(8000)
set @pos = 0
set @len = 0
set @bikes= @bikes +','
WHILE CHARINDEX(',', @bikes, @pos)>0 BEGIN
set @len = CHARINDEX(',', @bikes, @pos+1) - @pos
set @value = SUBSTRING(@bikes, @pos, @len)
INSERT INTO [bikes]
([bikes])
VALUES
(@value)
set @pos = CHARINDEX(',', @bikes, @pos+@len) +1
END
END
最佳答案
如果删除的行数为零,您可以获得删除的行计数并引发错误;对于插入语句,您可以使用 try/catch 并在 catch block 中引发错误。
//Perform delete
select @@ROWCOUNT
if @@ROWCOUNT = 0
//RAISE ERROR
BEGIN TRY
//perform insert here
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
-- Use RAISERROR inside the CATCH block to return
-- error information about the original error that
-- caused execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
还要检查 ERROR_STATE
返回的错误状态,然后将其作为值传递给 RAISERROR
的状态参数
干杯!!
关于JAVA使用删除和插入语句调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010049/