Frage

Ich bin mit OLE DB-Provider für ADO.Net zu einer Oracle-Datenbank verbinden. In meiner Schleife, mache ich einen Einsatz:

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)

Der erste Einsatz gelingt es aber die zweite gibt einen Fehler:

ORA-00933: SQL command not properly ended

Was mache ich falsch?

War es hilfreich?

Lösung

Für mich scheint es, Ihnen eine ; zwischen den beiden Aussagen sind vermisst:
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)
;
Versuchen Sie, die ; Hinzufügen und lassen Sie uns wissen.

Andere Tipps

In .net, wenn wir versuchen, eine einzelne Oracle SQL-Anweisung mit einem Semikolon am Ende auszuführen. Das Ergebnis wird ein Orakel Fehler sein: ora-00911: ungültiges Zeichen. OK, Sie herausfinden, dass ein SQL-Anweisung nicht das Semikolon muss, aber was ist die Ausführung 2 SQL-Anweisung in einer Zeichenfolge zum Beispiel:

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)

Der obige Code gibt Ihnen die gleichen Oracle-Fehler: ora-00911: ungültiges Zeichen

.

Die Lösung für dieses Problem ist Ihre 2 Oracle SQL-Anweisungen mit einer BEGIN und END; Syntax zu wickeln, zum Beispiel:

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

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

In Oracle das Semikolon ';' nur in sqlplus verwendet. Wenn Sie ODBC / JDBC verwenden, OLEDB, etc. Sie nicht setzen ein Semikolon am Ende Ihrer Aussage. Im obigen Fall ausgeführt werden Sie tatsächlich zwei verschiedene Aussagen so der beste Weg, um das Problem zu umgehen 2 Aussagen verwenden anstatt zu versuchen, zu einer einzigen Aussage zu kombinieren, da Sie nicht das Semikolon verwenden können.

Semikolon nach dem ersten Einsatz?

Oracle SQL verwendet ein Semikolon; als das Ende ihres Nutzungs Aussage Marker.

Sie müssen die hinzuzufügen; Mühe nach Einsatz statments.

NB: die ADODB auch 2 Einsätze in einem einzigen Anruf können übernimmt

.

Die Alternative könnte sein, beiden Anrufe in einem Block zu wickeln,

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

In meiner Schleife wurde ich nicht wieder initialisiert meinen String ... so die mehr Insert-Anweisung I geschrieben.

Danke für Ihre Hilfe sowieso !!

Es ist ein langer Schuss aber in dem ersten Einsatz der SQL-Datumsformat ist für beide uk / us gültig, der zweite Einsatz ist ungültig, wenn die Oracle-DB-Setup für UK Datumsformat ist, erkenne ich, Sie die TO_DATE Funktion verwendet haben, aber ich sehe nichts anderes ...

Ist das Semikolon von OLE_DB benötigt? Es ist nicht von den meisten API benötigt?

Der ADO.NET OLE DB-Provider ist für generischen Datenzugriff, wo Sie keinen bestimmten Anbieter für Ihre Datenbank. Verwenden OracleConnection et al bevorzugt gegen OleDbConnection für eine Oracle-Datenbank-Verbindung.

Neben dem Semikolon Problem, ich Sie dringend, schauen Sie in Bind-Variablen empfehlen. Andernfalls, sie benutzen können Datenbank-Performance Probleme auf dem Weg führen. Der Code neigt auch sauberer zu sein.

Das Problem kann sein, dass Sie eine Parametervariable, die null ist in die Abfrage eingefügt wird. Das war, was mein Problem war. Sobald ich die Parameter einen Standardwert von leeren String gab, funktionierte es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top