code ORA-00933: il comando SQL non è stato terminato correttamente



oracle error 00933 (8)

Sto usando il provider OLEDB per ADO.Net che si connette a un database Oracle. Nel mio ciclo, sto facendo un inserto:

insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)

Il primo inserimento ha esito positivo ma il secondo dà un errore:

ORA-00933: SQL command not properly ended

Che cosa sto facendo di sbagliato?


Answer #1

Nel mio ciclo non stavo reinizializzando il mio StringBuilder ... quindi l'istruzione di inserimento multiplo che ho postato.

Grazie comunque per il tuo aiuto !!


Answer #2

È un campo lungo ma nel primo inserimento il formato data sql è valido sia per uk / us, il secondo insert non è valido se il DB Oracle è impostato per il formato data UK, mi rendo conto che hai usato la funzione TO_DATE ma non lo faccio vedi qualcos'altro ...


Answer #3

A me sembra che ti manchi un ; tra le due dichiarazioni:
insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)
;
insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)
;
Prova ad aggiungere il ; e facci sapere


Answer #4

Oltre al problema del punto e virgola, ti consiglio vivamente di esaminare le variabili di bind. Non riuscendo a usarli può causare problemi di prestazioni del database lungo la strada. Il codice tende anche a essere più pulito.


Answer #5

In Oracle il punto e virgola ';' è usato solo in sqlplus. Quando si utilizza ODBC / JDBC, OLEDB, ecc. Non si mette un punto e virgola alla fine dell'istruzione. Nel caso precedente, in realtà stai eseguendo 2 diverse istruzioni, quindi il modo migliore per gestire il problema è utilizzare 2 istruzioni invece di provare a combinare in una singola istruzione poiché non puoi usare il punto e virgola.


Answer #6

In .net, quando proviamo a eseguire una singola istruzione Oracle SQL con un punto e virgola alla fine. Il risultato sarà un errore di Oracle: ora-00911: carattere non valido. OK, si calcola che una istruzione SQL non abbia bisogno del punto e virgola, ma per quanto riguarda l'esecuzione di 2 istruzioni SQL in una stringa, ad esempio:

Dim db As Database = DatabaseFactory.CreateDatabase("db")
Dim cmd As System.Data.Common.DbCommand
Dim sql As String = ""

sql = "DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; "

cmd = db.GetSqlStringCommand(sql)
db.ExecuteNonQuery(cmd)

Il codice sopra ti darà lo stesso errore Oracle: ora-00911: carattere non valido.

La soluzione a questo problema è di avvolgere le tue 2 istruzioni Oracle SQL con un BEGIN e END; sintassi, ad esempio:

sql = "BEGIN DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; END;"

Per gentile concessione: http://www.lazyasscoder.com/Article.aspx?id=89&title=ora-00911%3A+invalid+character+quando+executing+multiple+Oracle+SQL+statements


Answer #7

punto e virgola dopo il primo inserimento?


Answer #8

Il provider OLE DB ADO.NET è per l'accesso ai dati generici in cui non si dispone di un provider specifico per il database. Utilizzare OracleConnection et al in preferenza su OleDbConnection per una connessione al database Oracle.





ora-00933