从Java调用过程并使用RAISERROR抛出异常

时间:2015-04-24 07:06:58

标签: java sql-server-2008 stored-procedures callable-statement

我正从JAVA调用MsSql程序,使用以下代码创建发票:

CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, java.sql.Types.VARCHAR);
cstmt.execute();
resultValue = cstmt.getString(1);
…

在我的程序中,我使用select @cErrorOut;进行调试。

但是如果我在上面的示例中使用select,那么捕获就在这里我没有从RAISERROR (@cErrorOut,16,1);获得SqlException但是如果我删除select一切看起来没问题。如果我从ManagementStudio调用过程,我会得到一个错误,无论是否有选择。那是为什么?

这是工作而不是工作的例子:

由于select(NOT OK)我们没有得到sql异常的例子:

-- create item  
EXEC dbo.pHE_MoveItemsCreAll @ahKey, @cIdent,@nQty, @cNote, @nhUserId, @nNo OUTPUT,@cErrorOut OUTPUT,@cStatus OUTPUT;  

select @cErrorOut;

-- check for error status
if (@cStatus <> 'T') begin
    EXEC dbo._CreateInvoiceRollback @ahKey;
    RAISERROR (@cErrorOut,16,1);
end;

我们得到sql异常的例子(OK):

-- create item  
EXEC dbo.pHE_MoveItemsCreAll @ahKey, @cIdent,@nQty, @cNote, @nhUserId, @nNo OUTPUT,@cErrorOut OUTPUT,@cStatus OUTPUT;  

-- check for error status
if (@cStatus <> 'T') begin
    EXEC dbo._CreateInvoiceRollback @ahKey;
    RAISERROR (@cErrorOut,16,1);
end;

选择变量可以正常工作 - 异常不受影响:

select @anVat = anVAT from tHE_SetTax where acVATCode = @defaultVatCode;

我正在使用MsSql server 2008 r2。

0 个答案:

没有答案