Hallo,
ich versuche mit unterstehenden Code aus einer Oracle DB mit 20000 Einträgen eine SQL Datei zu schreiben.
Ich lese mit SQL die ID´s der einzelenen Zeilen aus und schreibe dann eine .SQL Datei (ein UpdateSkript)
allerdings bekomme ich nach kurzer Laufzeit einen:
PM schreiben.UpdateSQLSkriptSQLPlus writeSQL
SEVERE: null
java.sql.SQLException: ORA-01000: Maximale Anzahl offener Cursor überschritten
Connection geschlossen!
private static void writeSQL() {
try {
// get maxRownum Start
String maxRownum = “select count(*) from EXPORT”;
Statement stmt = null;
ResultSet rs = null;
stmt = datenbank._DB_Connection.conn.createStatement();
rs = stmt.executeQuery(maxRownum);
// get the number of rows from the result set
rs.next();
System.out.println("Anzahl der Zeilen in der EXPORT Tabelle: " + rs.getInt(1));
// get maxRownum END
// int count = 0;
count = rs.getInt(1);
System.out.println("Count: " + count);
now = new Date();
SimpleDateFormat format =
new SimpleDateFormat("yyyyMMdd");
String angemeldeterWindowsUser = System.getProperty("user.name");
// SQL Datei schreiben
file = new File("L:\\Export" + format.format(now) + "_" + angemeldeterWindowsUser + "_" + ".sql");
FileWriter fw = new FileWriter(file);
fw.write("--
“);
fw.write(”–
“);
fw.write(”–
");
fw.write("set pagesize 1024
");
fw.write("set linesize 1024
");
fw.write("set echo on
");
fw.write(“spool C:\TEMP\DeltaExport_” + format.format(now) + ".log
“);
fw.write(”
“);
fw.write(”–
");
fw.write("execute LTT_USER.SETCONFIGURATION (‘xxx’);
“);
fw.write(”
");
fw.write("grant shorttermtransactions to xxx;
“);
fw.write(”
“);
fw.write(”–
“);
fw.write(”
");
/* Updates
*
*/
// wenn die Zwischentabelle leer ist soll keine Erfolgsmeldung kommen!
// String leereTabelle wird dafür oben deklariert und im Profilkontroller benutzt...
if (count == 0) {
leereTabelle = 0;
System.out.println(leereTabelle);
System.out.println("Tabelle ist leer");
} else {
leereTabelle = 1;
// ##################################################################################
Statement stmtfid = null;
ResultSet rsfid = null;
while (count != 0) {
// fw = new FileWriter(file);
stmtfid = datenbank._DB_Connection.conn.createStatement();
rsfid = stmtfid.executeQuery("Select G3E_FID FROM EXPORT where ID = " + count);
rsfid.next();
int fid = rsfid.getInt(1);
//System.out.println("fid = " + fid);
// die Werte aus der DB auslesen
String PW1Value = "(select PW1 from EXPORT where g3e_fid = " + fid + ")";
String ct9Value = "(select PW1 from EXPORT where g3e_fid = " + fid + ")"; // PW1 = ct9 -> andere Tabelle!!
String PW3Value = "(select PW3 from EXPORT where g3e_fid = " + fid + ")";
String ct8Value = "(select PW3 from EXPORT where g3e_fid = " + fid + ")"; // PW3 = ct8 -> andere Tabelle!!
String profilesValue = "(select PROFILES from EXPORT where g3e_fid = " + fid + ")";
//System.out.println("PW1Value = " + PW1Value);
// Die fertigen Updateskripte erzeugen und in einen String schreiben
String set_PW1 = "update B$B_CONOBJ_N set PW1 = " + PW1Value.toString() + " where g3e_fid = " + fid;
String CT9 = "update B$E_NE_ELE_N set ct9 = " + ct9Value + " where g3e_fid = " + fid;
String set_PW3 = "update B$B_CONOBJ_N set PW3 = " + PW3Value + " where g3e_fid = " + fid;
String CT8 = "update B$E_NE_ELE_N set ct8 = " + ct8Value + " where g3e_fid = " + fid;
String PROFI = "update B$B_CONOBJ_N set PROFILES = " + profilesValue + " where g3e_fid = " + fid;
// die Updates in die .sql Datei schreiben
fw.write(set_PW1 + ";
");
fw.write(CT9 + ";
");
fw.write(set_PW3 + ";
");
fw.write(CT8 + ";
");
fw.write(PROFI + ";
“);
fw.write(”
");
System.out.println(set_PW1);
// count um 1 erniedrigen um in der While Schleife weiter zu kommen und alle Fi´s abarbeiten
//fw.close();
// rsfid.close();
// stmtfid.close();
count = count - 1;
}//fw.close();
fw.close();
stmtfid.close();
rsfid.close();
} // end while loop