Oracle DatenTransport

capri

Mitglied
Hallo Forum,

ich möchte bestimmte Daten (nicht komplette DB) aus PostgreSQL auslesen und in Oracle einfügen (immer noch).

Ich möchte hierfür Prapaire-Statements benutzen, wie es mir hier bereits beigebracht wurde:

Code:
String select = "SELECT t.* FROM title t JOIN kind_type kt ON t.kind_id = kt.id WHERE kt.kind IN (" + selectTitle + ");";

String insert = "INSERT INTO TITLE (ID, TITLE, IMDB_INDEX, KIND_ID, PRODUCTION_YEAR, IMDB_ID) VALUES (?, ?, ?, ?, ?, ?) ;";
con2.setAutoCommit(false);
        try (PreparedStatement pstmt = con2.prepareStatement(insert)) {
            try (Statement stmt = con1.createStatement()) {
                try (ResultSet rs = stmt.executeQuery(select)) {
                    int chunk = 0;
                    while (rs.next()) {
                        pstmt.setString(1, Integer.toString(rs.getInt(1)));
                        pstmt.setString(2, rs.getString(2));
                        pstmt.setString(3, rs.getString(3));
                        pstmt.setString(4, Integer.toString(rs.getInt(4)));
                        pstmt.setString(5, Integer.toString(rs.getInt(5)));
                        pstmt.setString(6, Integer.toString(rs.getInt(6)));
                      
                        chunk++;
                        if (chunk == 100) {
                        pstmt.executeBatch();
                        chunk = 0;
                        }
                    }
                    pstmt.executeBatch();
                }
                con2.commit();
            }
        }

Dabei bin ich jetzt auf 2 Probleme gestoßen:

1) Die String-Werte muss ich anscheinend noch mal in " ' " verpacken, weil auch wenn ich manuel das Befehl durchführe, meckert Oracle darüber. Ist es richtig? (Ich habe schon andere Tabellen von Postgre in Oracle transportiert und da war es nicht nötig).

2) Wenn ich mit getInt() auf "NULL"-Werte zugreife, kriege ich "0" als Ergebnis und damit kann Oracle wohl auch nicht viel anfangen bzw. er nimmt das als einen richtigen Wert und ich kriege ein Problem mit den Fremdschlüsseln. Wie kann ich aus 0 auf eine elegante Art und Weise "NULL" machen? Also nicht so:
Code:
while (rs.next()) {
    String id=Integer.toString(rs.getInt(1));
    if(id.equals("0")){
        id="NULL";
    }
    pstmt.setString(1, id);
...
}

Schönen Dank im Voraus!
capri
 

Neue Themen


Oben