Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33090

Como chamar uma procedure com saida de um array

$
0
0

@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

Ler tópico completo


Viewing all articles
Browse latest Browse all 33090


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>