Oracle
 sql >> Database >  >> RDS >> Oracle

Dov'è il mio carattere non valido (ORA-00911)

Se usi la stringa letterale esattamente come ci hai mostrato, il problema è il ; personaggio alla fine. Potresti non includerlo nella stringa di query nelle chiamate JDBC.

Poiché stai inserendo solo una singola riga, un normale INSERT dovrebbe andare bene anche quando si inseriscono più righe. L'uso di un'istruzione in batch è comunque più efficiente. Non c'è bisogno di INSERT ALL . Inoltre non hai bisogno del clob temporaneo e tutto il resto. Puoi semplificare il tuo metodo in qualcosa del genere (supponendo che io abbia i parametri corretti):

String query1 = "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'";

String query2 = ".....";

String sql = "insert into domo_queries (clob_column) values (?)";
PreparedStatement pstmt = con.prepareStatement(sql);
StringReader reader = new StringReader(query1);
pstmt.setCharacterStream(1, reader, query1.length());
pstmt.addBatch();

reader = new StringReader(query2);
pstmt.setCharacterStream(1, reader, query2.length());
pstmt.addBatch();

pstmt.executeBatch();   
con.commit();