Como chamar uma procedure com saida de um array

Olá gostaria de saber como fazer para chamar uma procedure que tem como saída um array.

tenho a seguinte procedure

CREATE OR REPLACE PROCEDURE sp_erros_processo(p_cod_erro OUT NUMBER,
                                              p_erros    OUT tab_tipo_erro) AS

  v_idx_erro NUMBER := 1;

BEGIN
  p_erros := tab_tipo_erro();

  --simular carga do array com os erros
  FOR i_rg_erros IN 1 .. 50 LOOP
    p_erros.extend;
    p_erros(v_idx_erro) := obj_tipo_erro('[ ERRO ] - ' || v_idx_erro,
                                         '[ ERRO ] - ' || v_idx_erro);

    --variavel para controlar o indice do array  
    v_idx_erro := v_idx_erro + 1;
  END LOOP;

  p_cod_erro := 0;

EXCEPTION
  WHEN OTHERS THEN
    p_cod_erro := 2;
    p_erros.extend;
    p_erros(v_idx_erro + 1) := obj_tipo_erro('[ ERRO ] - ' || v_idx_erro,
                                             '[ ERRO ] - ' || v_idx_erro);
  
END sp_erros_processo;

e estou chamando no Java da Seguinte forma ;

import java.sql.Connection;
import java.sql.SQLException;

import oracle.jdbc.internal.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes;

public class ChamarPackTeste {
	private Connection minhaConnection;

	public ChamarPackTeste(Connection minhaConnection ) {
		this.minhaConnection = minhaConnection;
	}
	
	public void chamarPack() throws SQLException {
		String pacErros = "{ begin CALL sp_erros_processo(?, ?); end}";
		
		OracleCallableStatement procedure = (OracleCallableStatement) minhaConnection.prepareCall(pacErros);
		procedure.registerOutParameter(1, OracleTypes.NUMBER);
		procedure.registerOutParameter(2, OracleTypes.ARRAY ,"tab_tipo_erro" );
		
		
		procedure.execute();
		
		
		System.out.println(procedure.getInt(1));
		System.out.println(procedure.getInt(2));
	
	}
	
	public static void main(String[] args) throws SQLException {
		Connection conexao = new ConexaoFactory().obterConexaoHomologacao();
		new ChamarPackTeste(conexao).chamarPack();
	}
}

porém quando chamo ocorre o erro

Exception in thread “main” java.sql.SQLException: padrão de nome inválido: tab_tipo_erro
at oracle.jdbc.oracore.OracleTypeADT.initMetadata12(OracleTypeADT.java:580)
at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:507)
at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469)
at oracle.sql.ArrayDescriptor.initPickler(ArrayDescriptor.java:1737)
at oracle.sql.ArrayDescriptor.(ArrayDescriptor.java:250)
at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:120)
at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:74)
at oracle.jdbc.driver.NamedTypeAccessor.otypeFromName(NamedTypeAccessor.java:81)
at oracle.jdbc.driver.TypeAccessor.initMetadata(TypeAccessor.java:74)
at oracle.jdbc.driver.T4CCallableStatement.allocateAccessor(T4CCallableStatement.java:614)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:192)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:236)
at oracle.jdbc.driver.OracleCallableStatementWrapper.registerOutParameter(OracleCallableStatementWrapper.java:1619)
at br.com.atlantic.solutions.dao.ChamarPackTeste.chamarPack(ChamarPackTeste.java:21)
at br.com.atlantic.solutions.dao.ChamarPackTeste.main(ChamarPackTeste.java:34)

Primeiro resultado de uma busca no google me retornou isso

então mas pelo que eu vi esse exemplo é de entrada eu precisava de um exemplo onde a saída é um array ou uma collections de objeto

Pessoal consegui a solução

public void chamarPack2() throws SQLException {
String pacErros = “{CALL sp_erros_processo(?, ?)}”;

		OracleCallableStatement procedure = (OracleCallableStatement) minhaConnection.prepareCall(pacErros);
		procedure.registerOutParameter(1, OracleTypes.NUMBER);
		procedure.registerOutParameter(2, OracleTypes.ARRAY , "TAB_TIPO_ERRO");
		procedure.execute();
		
		java.sql.Array structure = procedure.getArray(2);
		
		Object[] structureArray = (Object[])structure.getArray();
		
		Object[] atributosArray = null;
		
		for (Object struct : structureArray) {
			STRUCT meuStructure = (STRUCT)struct;
			atributosArray = meuStructure.getAttributes();
			for (Object object : atributosArray) {
				System.out.println(object);
			}
			
		}
	}