sql >> Databáze >  >> RDS >> Oracle

Kde je můj neplatný znak (ORA-00911)

Pokud použijete řetězcový literál přesně tak, jak jste nám ukázali, problém je v ; postava na konci. Nesmíte to zahrnout do řetězce dotazu ve voláních JDBC.

Protože vkládáte pouze jeden řádek, obyčejný INSERT by mělo být v pořádku i při vkládání více řádků. Použití dávkového příkazu je stejně pravděpodobně efektivnější. Není potřeba INSERT ALL . Navíc nepotřebujete dočasný clob a tak. Svou metodu můžete zjednodušit na něco takového (za předpokladu, že mám správné parametry):

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


  1. Jak mohu použít mysqli_fetch_array() dvakrát?

  2. Optimistická souběžnost:IsConcurrencyToken a RowVersion

  3. Oracle- Rozdělit řetězec oddělený čárkou (řetězec obsahuje mezery a po sobě jdoucí čárky)

  4. SQL*Plus jak přijmout textovou proměnnou z výzvy?