public List<HashMap> searchQoneba(String searchText) throws SQLException, AppException {

    List<HashMap> result = new ArrayList<HashMap>();

    OracleResultSet rset = null;
    OracleCallableStatement stmt = null;
    try {

      stmt =
          (OracleCallableStatement)
              conn.prepareCall(
                  "begin ?:=" + TgisDBUtils.SCHEMA + "SEARCH_PKG.search_qoneba( ? ); end;");

      stmt.registerOutParameter(1, OracleTypes.CURSOR);

      stmt.setString(2, searchText);

      stmt.execute();

      rset = (OracleResultSet) stmt.getCursor(1);

      DBUtils.fetchOraSysRefCursor(rset, result, true, null);

      return result;

    } finally {
      DBUtils.clear(rset, stmt);
    }
  }
  public List<HashMap> searchRoads(String searchText) throws SQLException, AppException {

    List<HashMap> result = new ArrayList<HashMap>();

    OracleResultSet rset = null;
    OracleCallableStatement stmt = null;
    try {

      stmt =
          (OracleCallableStatement)
              conn.prepareCall(
                  "begin ?:=" + TgisDBUtils.SCHEMA + "SEARCH_PKG.search_roads( ? ); end;");

      stmt.registerOutParameter(1, OracleTypes.CURSOR);

      stmt.setString(2, searchText);

      stmt.execute();

      rset = (OracleResultSet) stmt.getCursor(1);

      DBUtils.fetchOraSysRefCursor(rset, result, true, null);

      for (HashMap road : result) {
        List<HashMap> roadParts = (List<HashMap>) road.get("geometry");
        if (roadParts.size() == 1) {
          road.put("geometry", ((HashMap) roadParts.get(0)).get("geometry"));
        } else {
          if (roadParts.size() > 1) {
            StringBuilder joinedRoadWkt = new StringBuilder("MULTILINESTRING (");
            for (HashMap roadPart : roadParts) {

              String roadPartWkt = (String) roadPart.get("geometry");
              joinedRoadWkt.append(
                  roadPartWkt.replaceFirst("LINESTRING ", "").replaceFirst("MULTILINESTRING ", ""));
              joinedRoadWkt.append(",");
            }
            joinedRoadWkt.append(")");
            road.put("geometry", joinedRoadWkt.toString());
          } else {
            road.put("geometry", null);
          }
        }
      }

      return result;

    } finally {
      DBUtils.clear(rset, stmt);
    }
  }