Domanda

Sto utilizzando il provider OLEDB per ADO.Net connettendomi 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 riesce ma il secondo dà un errore:

ORA-00933: SQL command not properly ended

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

A me sembra che ti manchi un ; tra le due affermazioni:
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 fatecelo sapere.

Altri suggerimenti

In .net, quando proviamo a eseguire una singola istruzione SQL Oracle con un punto e virgola alla fine.Il risultato sarà un errore Oracle:ora-00911:carattere non valido.OK, immagini che un'istruzione SQL non abbia bisogno del punto e virgola, ma che ne dici di eseguire 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 è racchiudere le tue 2 istruzioni SQL Oracle con a BEGIN E END; sintassi, ad esempio:

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

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

In Oracle the Semi-Colon ";" viene utilizzato solo in sqlplus.Quando utilizzi ODBC/JDBC, OLEDB, ecc., non inserire un punto e virgola alla fine dell'istruzione.Nel caso precedente stai effettivamente eseguendo 2 istruzioni diverse, quindi il modo migliore per gestire il problema è utilizzare 2 istruzioni invece di provare a combinarle in una singola istruzione poiché non puoi utilizzare il punto e virgola.

punto e virgola dopo il primo inserimento?

Oracle SQL utilizza un punto e virgola ;come indicatore di fine istruzione.

dovrai aggiungere il ;dopo il disturbo inserire le dichiarazioni.

NB:ciò presuppone anche che ADODB consenta 2 inserimenti in una singola chiamata.

l'alternativa potrebbe essere quella di racchiudere entrambe le chiamate in un blocco,

BEGIN
      insert (...) into (...);
      insert (...) into (...);
END;

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

Grazie comunque per il tuo aiuto!!

È un azzardo, ma nel primo inserimento il formato della data sql è valido sia per il Regno Unito che per gli Stati Uniti, il secondo inserimento non è valido se il DB Oracle è impostato per il formato della data del Regno Unito, mi rendo conto che hai utilizzato la funzione TO_DATE ma non lo so vedi qualcos'altro...

È necessario il punto e virgola da OLE_DB?Non è necessario per la maggior parte delle API?

Il provider ADO.NET OLE DB è destinato all'accesso ai dati generici laddove non si dispone di un provider specifico per il database.Utilizzare OracleConnection et al anziché OleDbConnection per una connessione al database Oracle.

Oltre al problema del punto e virgola, consiglio vivamente di esaminare le variabili di associazione.Il loro mancato utilizzo può causare problemi di prestazioni del database in futuro.Anche il codice tende ad essere più pulito.

Il problema potrebbe essere che nella query è stata inserita una variabile parametro nulla.Questo era il mio problema.Dopo aver assegnato al parametro un valore predefinito di stringa vuota, ha funzionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top