create or replace procedure testcur(ref_cursor out sys_refcursor) as begin open ref_cursor for select sysdate from dual; end;
java代码如下:
try { DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); CallableStatement stmt = conn.prepareCall("BEGIN testcur(?); END;"); //也可以这样调用 //CallableStatement stmt = conn.prepareCall("{ call testcur(?) }"); stmt.registerOutParameter(1, -10 /* OracleTypes.CURSOR = -10 */); //REF CURSOR(OracleTypes.CURSOR==-10) stmt.execute(); ResultSet rs = (ResultSet) stmt.getObject(1); while (rs.next()) { System.out.println(rs.getObject(1); } rs.close(); rs = null; stmt.close(); stmt = null; conn.close(); conn = null; } catch (SQLException e) { System.out.println(e.getLocalizedMessage()); }