--定义一个包,包里有一个游标create or replace package testpackage astype test_cursor is ref cursor;end testpackage;--利用游标返回多个值(一个列表)SQL> create or replace procedure getEmpInfoByDeptno(mdeptno in number,m_cursor out testpackage.test_cursor) is 2 begin 3 open m_cursor for select * from emp where deptno=mdeptno; 4 end; 5 /
可以在Java中调用这个存储过程
package com.morflame;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;public class GetEmpInfo { public static void main(String[] args) { try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger"); CallableStatement cs=conn.prepareCall("{call getEmpInfoByDeptno(?,?)}"); cs.setInt(1, 10); cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);//^_^ cs.execute(); ResultSet rs=(ResultSet)cs.getObject(2); while(rs.next()){ System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)); } rs.close(); cs.close(); conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }}