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)