Wo ist mein ungültiger Charakter (ORA-00911)

Ich versuche zu legen CLOBs in eine Datenbank (siehe stellt sich die Frage,). Ich kann nicht ganz herausfinden, was falsch ist. Ich habe eine Liste mit etwa 85 clobs ich möchte in eine Tabelle einfügen. Auch beim einfügen nur die erste clob bekomme ich ORA-00911: invalid character. Ich kann nicht herausfinden, wie man die Behauptung aus der PreparedStatement bevor es ausgeführt wird, so kann ich nicht 100% sicher, dass es richtig ist, aber wenn ich es hinbekommen, dann sollte es genau so Aussehen:

insert all
  into domo_queries values ('select 
substr(to_char(max_data),1,4) as year,
substr(to_char(max_data),5,6) as month,
max_data
from dss_fin_user.acq_dashboard_src_load_success
where source = ''CHQ PeopleSoft FS''')
select * from dual;

Letztlich einfügen, alle Aussage hätte viel into's, das ist der Grund, warum ich einfach nicht tun, eine regelmäßige insert - Anweisung. Ich sehe nicht ein ungültiges Zeichen in es, tun Sie? (Ach ja, der code oben läuft gut, wenn ich es in meiner sql developer tool.) Und ich, wenn ich entfernen Sie das Semikolon in der PreparedStatement es wirft ein ORA-00933: SQL command not properly ended Fehler.

In jedem Fall, hier ist mein code für die Abfrage ausführt (und die Werte der Variablen für das Beispiel oben).

public ResultSet executeQuery(String connection, String query, QueryParameter... params) throws DataException, SQLException {
  //query at this point = "insert all
                          //into domo_queries values (?)
                          //select * from dual;"
  Connection conn = ConnectionPool.getInstance().get(connection);
  PreparedStatement pstmt = conn.prepareStatement(query);
  for (int i = 1; i <= params.length; i++) {
    QueryParameter param = params[i - 1];
    switch (param.getType()) { //The type in the example is QueryParameter.CLOB
      case QueryParameter.CLOB:
        Clob clob = CLOB.createTemporary(conn, false, oracle.sql.CLOB.DURATION_SESSION);
        clob.setString(i, "'" + param.getValue() + "'");
        //the value of param.getValue() at this point is:
        /*
         * select 
         * substr(to_char(max_data),1,4) as year,
         * substr(to_char(max_data),5,6) as month,
         * max_data
         * from dss_fin_user.acq_dashboard_src_load_success
         * where source = ''CHQ PeopleSoft FS''
         */
        pstmt.setClob(i, clob);
        break;
      case QueryParameter.STRING:
        pstmt.setString(i, "'" + param.getValue() + "'");
        break;
    }
  }
  ResultSet rs = pstmt.executeQuery(); //Obviously, this is where the error is thrown
  conn.commit();
  ConnectionPool.getInstance().release(conn);
  return rs;
}

Ist es etwas, was ich bin fehlt nur noch big time?

InformationsquelleAutor der Frage kentcdodds | 2012-05-23

Schreibe einen Kommentar