Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Buscar valores de retorno de array pl/sql em java


Eu não fiz isso com ARRAY mas deve funcionar. Primeiro você deve registrar out parâmetro da sua função. Então pode ser assim.
private final String PRODECURE_NAME = "{? = call <ProcedureName>(?,?,?)}";

Connection con = null;
CallableStatement cs = null;

       try {
            con = DAOFactory.getDatabaseConnection();
            cs = con.prepareCall(PRODECURE_NAME);
            cs.registerOutParameter(1, java.sql.Types.ARRAY);
            cs.setYourType(2, <yourData>);
            cs.setYourType(3, <yourData>);
            cs.setYourType(4, <yourData>);
            cs.execute();
            Array arr = cs.getArray(1);
            if (arr != null) {
               String[] data = (String[]) arr.getArray();
            }
        } 
        catch (SQLException ex) {
            Logger.getLogger(OracleLiekDAO.class.getName()).log(Level.SEVERE, null, ex);
            try {
                con.rollback();
            }
        }
        finally {
            if (con != null) {
                try {
                    con.close();
                } 
                catch (SQLException ex) {
                    Logger.getLogger(OracleLiekDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

Tente este homem e me dê uma resposta se é ou não.

EDITAR:

Esses caracteres ? representa um parâmetro que você definirá (é nomeado como parametrizado).
cs.setYourType(2, <yourData>);
cs.setYourType(3, <yourData>);
cs.setYourType(4, <yourData>);

significa que você define seus três parâmetros (?), o primeiro parâmetro do método é o índice da coluna e o segundo são os dados do seu tipo específico.

EDIÇÃO 2:

Desculpe, eu escrevi uma solução ruim, já atualizada, então verifique o código agora e tente.