@edsilvasp escreveu:
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)
Mensagens: 3
Participantes: 2