Migrar dados postgis para oracle spatial

Pessoal, essa semana me deparei com a seguite situação. precisei de uma base gis para teste no oracle e só possuia uma base de exemplo no postgres.
A primeira opção era exportar as tabelas do postgres para shapefile e depois importar no oracle. ainda não tive tempo para ver o porque de não ter funcionado (deu um erro bruto no aplicativo da oracle pra fazer a importação), mas como segunda opção, fiz uma classe Main pra fazer a migração.
Vai o exemplo pra quem precisar ou tiver alguma situação parecida. Pra mim funcionou muito bem e quando sobrar um tempo, vou pensar em um aplicativo pra facilitar esse tipo de coisa e postar o fonte no gogle code.

package sdoapi;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.jdbc.driver.OracleConnection;
import oracle.spatial.geometry.JGeometry;
import oracle.spatial.util.GeometryExceptionWithContext;
import oracle.spatial.util.WKT;
import oracle.sql.STRUCT;

public class Main {

    public static void main(String[] args) {
        Connection connOracle;
        Connection connPostgres;
        PreparedStatement ps;

        try {
            //connect postgis and select data
            Class.forName("org.postgresql.Driver");
            connPostgres = DriverManager.getConnection("jdbc:postgresql://localhost:5432/dbsolap", "postgres", "postgres");
            Statement st = connPostgres.createStatement();
            ResultSet rs = st.executeQuery("select id_micro,id_meso,nomemicro,ST_AsText(the_geom) as the_geom from microregiao;");

            // connect oracle
            Class.forName("oracle.jdbc.driver.OracleDriver");
            connOracle = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/orcl", "igor", "oracle");
            WKT wkt = new WKT();
            ps = connOracle.prepareStatement("insert into microregiao values(?,?,?,?)");

            // process resultset postgis and insert oracle
            while (rs.next()) {
                Integer param1 = rs.getInt("id_micro");
                Integer param2 = rs.getInt("id_meso");
                String param3 = rs.getString("nomemicro");
                String param4 = rs.getString("the_geom");
                JGeometry geom = wkt.toJGeometry(param4.getBytes());
                OracleConnection oc = (OracleConnection) ps.getConnection();
                STRUCT struct = JGeometry.store(geom, oc);

                ps.setInt(1, param1);
                ps.setInt(2, param2);
                ps.setString(3, param3);
                ps.setObject(4, struct);

                ps.executeUpdate();
            }

        } catch (GeometryExceptionWithContext ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

T+ :slight_smile: