====== Calling Stored Procedure with Output parameters ======
Assume we have a stored procedure like this in our database:
USE [YOUR_DATABASE_NAME]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[TestParamOutput]
@test_input1 INT,
@test_input2 INT,
@test_input3 INT,
@test_input4 INT,
@test_output1 INT OUTPUT,
@test_output2 INT OUTPUT,
@test_output3 INT OUTPUT,
@test_output4 INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @test_output1 = @test_input1+@test_input2;
SELECT @test_output2 = @test_input3+@test_input4;
SELECT @test_output3 = @test_input1*@test_input2;
SELECT @test_output4 = @test_input3*@test_input4;
END
We can do the following in our service class. Note that the name procedure name, and the parameter names should match.
@PersistenceContext
private EntityManager em;
public int[] getSPOutput(){
StoredProcedureQuery proc = em.createStoredProcedureQuery("TestParamOutput");
proc.registerStoredProcedureParameter("test_input4", Integer.class, ParameterMode.IN);
proc.registerStoredProcedureParameter("test_input1", Integer.class, ParameterMode.IN);
proc.registerStoredProcedureParameter("test_input2", Integer.class, ParameterMode.IN);
proc.registerStoredProcedureParameter("test_input3", Integer.class, ParameterMode.IN);
proc.registerStoredProcedureParameter("test_output4", Integer.class, ParameterMode.OUT);
proc.registerStoredProcedureParameter("test_output3", Integer.class, ParameterMode.OUT);
proc.registerStoredProcedureParameter("test_output2", Integer.class, ParameterMode.OUT);
proc.registerStoredProcedureParameter("test_output1", Integer.class, ParameterMode.OUT);
proc.setParameter("test_input1", 1);
proc.setParameter("test_input2", 2);
proc.setParameter("test_input3", 3);
proc.setParameter("test_input4", 4);
proc.execute();
return new int[]{(int) proc.getOutputParameterValue("test_output1"),
(int) proc.getOutputParameterValue("test_output2"),
(int) proc.getOutputParameterValue("test_output3"),
(int) proc.getOutputParameterValue("test_output4")};
}