public static <T> List<T> executeProcedureReturnCursor(Connection con, String procedureName, Class<T> beanClass,
			Object... params) throws SQLException, InstantiationException, IllegalAccessException {
		List<T> lists = new ArrayList<T>();
		CallableStatement proc = null;
		ResultSet rs = null;
		try {
			proc = con.prepareCall(procedureName);
			proc.registerOutParameter(1, OracleTypes.CURSOR);
			for (int i = 0; i < params.length; i++) {
				proc.setObject(i + 2, params[i]);
			}
			boolean b = proc.execute();
			if (b) {
				rs = (ResultSet) proc.getObject(1);
				while (null != rs && rs.next()) {
					T t = beanClass.newInstance();
					Field[] fields = beanClass.getDeclaredFields();
					for (Field f : fields) {
						f.setAccessible(true);
						String name = f.getName();
						try {
							Object value = rs.getObject(name);
							setValue(t, f, value);
						} catch (Exception e) {
						}
					}
					lists.add(t);
				}
			}
		} finally {
			if (null != rs)
				rs.close();
			if (null != proc)
				proc.close();
		}
		return lists;
	}