[Resolvido]Recuperar valor de parâmetro de saída ( output parameter )

Boa tarde pessoal !

Como faço para recuperar um valor de um output parameter ? preciso retornar um valor int.

O que está errado no código abaixo ? ( a procedure resumida está ali embaixo ):

Obs: no System.out.println(…) no código abaixo, está retornando o valor 0 (zero) sendo que a procedure retorna a coluna “retorno” outro valor, como por exemplo o valor inteiro “2”.

public int Alteraragenda(Agenda objAgenda, Agenda objAgendab) throws SQLException{
    
    Conexao conexao = new Conexao();
    
    CallableStatement callable = conexao.getConexao()
            .prepareCall("{call alteraragenda(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");

    callable.setInt(1, objAgenda.getCodigo());
    callable.setString(2, objAgenda.getDoutor()); 
    (...)
    callable.registerOutParameter(19, java.sql.Types.INTEGER);
    //callable.setInt(19, 1);
    
    callable.execute();

int retorno = callable.getInt(19);

System.out.println("Parametro output: "+retorno); 

return retorno;

    }

Estou fazendo, no final da procedure, um select na variável @retorno que é o parâmetro de saída:

alter procedure alteraragenda(
@codigo int, (...)
@retorno int out
)
as
begin

declare @codagendaficar (...)

select @codagendaesta = codigoagendamento (..)
select @codagendaficar = codigoagendamento(...)

if @codigo = (...)
begin
	set @retorno = 0
end
else 
begin
if @codagendaesta (...)
begin
	update agenda set (...)
                set @retorno = 1
end
else 
begin
	if @codagendaficar (...)
	begin
	    if @codpacienteesta (...)	    
                    begin
			delete from agenda (...)

			declare @nomeagendado nvarchar(50)
			select @nomeagendado = nome from agenda where data = @data and hora = @hora and doutor = @doutor

			if @nomeagendado is null or @nomeagendado = '' or @nomeagendado = null 
			begin
			set @codigo = case when @codigo = '0' then null else @codigo end 
			insert into agenda (codigo, doutor, nome, telefone, data, hora, tipoagendamento, status, valor)
			values ( @codigo, @doutor, @nome, @telefone, @data, @hora, @tipo, @status, @valor )
			end
			set @retorno = 2
		end
		else
		begin
			set @retorno = 3
		end
	end
	else
	begin 
		set @retorno = 4 
	end
end
end
select @retorno as retorno
end

A procedure acima retorna somente a coluna “retorno” com o valor, por exemplo “2”.

Desde já, obrigado

Joguei no objeto da classe, onde criei uma variavel retorno:

public Agenda Alteraragenda(Agenda objAgenda, Agenda objAgendab) throws SQLException{
    
    Conexao conexao = new Conexao();
    
    Agenda objAgendac = new Agenda();
    
    CallableStatement pstmt = conexao.getConexao()
            .prepareCall("{call alteraragenda(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
    pstmt.setInt(1, objAgenda.getCodigo());
    pstmt.setString(2, (...)

    //Deve-se registrar o parâmetro de saída antes de executar a query 
    pstmt.registerOutParameter(19, java.sql.Types.INTEGER);
    
     ResultSet rs = pstmt.executeQuery();
    
    while(rs.next()){
        objAgendac.setRetorno(rs.getInt("retorno"));
    }
    
    return objAgendac;

Na procedure:


ALTER procedure [dbo].[alteraragenda](
@codigo int, (...) 
@retorno int output
)
as
begin

declare @codagendaficar (...)

select @codagendaesta (...) where data = @datab (...)
select @codagendaficar (...) where data = @data (...)

if @codigo = @codigob (...)
begin
	set @retorno = 0 
end
else 
begin
if @codagendaesta = @codagendaficar 
begin
	update agenda set tipoagendamento (...)
    set @retorno = 1 
end

(...)

else
	begin 
		set @retorno = 4 
	end
end
end
select @retorno as retorno
end