Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Pl/sql-Array-Rückgabewerte in Java abrufen

Das habe ich mit ARRAY nicht gemacht aber es sollte funktionieren. Zuerst müssen Sie out registrieren Parameter Ihrer Funktion. So kann es sein.

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);
                }
            }
        }

Probieren Sie diesen Mann aus und geben Sie mir dann eine Antwort, ob es geht oder nicht.

BEARBEITEN:

Diese Zeichen ? stellt einen Parameter dar, den Sie einstellen werden (er wird als parametrisiert bezeichnet). Also dies:

cs.setYourType(2, <yourData>);
cs.setYourType(3, <yourData>);
cs.setYourType(4, <yourData>);

bedeutet, dass Sie Ihre drei Parameter (?) festlegen, der erste Parameter der Methode ist der Spaltenindex und der zweite sind Ihre Daten Ihres spezifischen Typs.

BEARBEITEN 2:

Es tut mir leid, dass ich eine schlechte Lösung geschrieben habe, die bereits aktualisiert wurde. Überprüfen Sie den Code jetzt und versuchen Sie es.