Oracle
 sql >> Base de données >  >> RDS >> Oracle

Où est mon caractère invalide (ORA-00911)

Si vous utilisez la chaîne littérale exactement comme vous nous l'avez montré, le problème est le ; personnage à la fin. Vous ne pouvez pas l'inclure dans la chaîne de requête des appels JDBC.

Comme vous n'insérez qu'une seule ligne, un INSERT normal devrait être très bien même lors de l'insertion de plusieurs lignes. L'utilisation d'une instruction par lots est probablement plus efficace de toute façon. Pas besoin de INSERT ALL . De plus, vous n'avez pas besoin du clob temporaire et tout ça. Vous pouvez simplifier votre méthode à quelque chose comme ceci (en supposant que j'ai bien compris les paramètres) :

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();