sql >> Base de Datos >  >> RDS >> Oracle

¿Dónde está mi carácter inválido (ORA-00911)

Si usa el literal de cadena exactamente como nos ha mostrado, el problema es el ; personaje al final. No puede incluir eso en la cadena de consulta en las llamadas JDBC.

Como está insertando solo una fila, un INSERT regular debería estar bien incluso al insertar varias filas. Usar una declaración por lotes es probablemente más eficiente de todos modos. No es necesario INSERT ALL . Además, no necesita el clob temporal y todo eso. Puede simplificar su método a algo como esto (suponiendo que tenga los parámetros correctos):

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