這是我的存儲過程,它返回一個值。我需要調用這個過程並將返回值傳入我的java程序中。 使用java從sql server存儲過程中檢索返回的值
CREATE PROCEDURE my_procedure @advisor de , @adv_xml xml
AS
begin
declare
@psrg_idi idi,
@adv_cd cd,
@CurrDate cdt
set @adv_cd = (select adv_cd from dbo.ADVICE_LK where upper(rtrim(adv_de)) = upper(@advisor))
set @psrg_idi = 0
set @CurrDate = getdate()
BEGIN TRY
exec my_proc_2 @CurrDate,@psrg_idi output
insert into
ADVICE
(psrg_idi,
adv_cd,
psra_original_xml)
values
(@psrg_idi,
@adv_cd,
@adv_xml)
select
@psrg_idi as psrg_idi
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.
);
return -1
END CATCH
end
這裏是我想如何獲得這個值到我的java程序返回上述存儲過程。當我從java調用這個過程時,所有期望值都存儲在數據庫表中。但我收到返回值groupId'0'..任何想法或幫助將不勝感激。
CallableStatement cs = con.prepareCall("{? = call my_procedure (?,?)}");
int i = 0;
cs.registerOutParameter(++i, java.sql.Types.INTEGER);
cs.setString(++i, advisor);
cs.setString(++i, adviceXml);
cs.execute();
int groupId = cs.getInt(1);
我已經檢討接受的答案https://stackoverflow.com/a/1948518/674476。我也嘗試以相同的方式,但不知何故無法獲得返回的值
什麼是您的RDBMS? – dasblinkenlight
@ dasblinkenlight,MS SQL Server –