2016-05-27 8 views
-1

Ich muss einige Code aktualisieren und als Teil davon muss ich eine Zeile in eine Tabelle einfügen und die ID erhalten (Primärschlüssel) der gerade eingegebenen Zeile.VB.NET Oracle SQL "INSERT INTO" mit "RETURNING INTO" gibt ORA-00933 Befehl nicht ordnungsgemäß beendet

Haben Sie dies erforscht und ich glaube, ich sollte RETURNING INTO und Oracle-Parameter verwenden. Ich habe Parameter in der Vergangenheit erfolgreich verwendet, um Werte einzufügen.

Ich habe eine INSERT-Anweisung, die perfekt von VB.NET läuft, aber sobald ich den Text „“ RÜCKKEHR id INTO: myid“add ich ORA-00933-Befehl nicht richtig Ended

hier ein ist. Version des Codes

sql = "INSERT ... RETURNING id INTO :myId" 
Connect() 
Dim intRecsAffected As Integer = 0 

Dim comm As OracleCommand = New OracleCommand(sql, _conn) 
Dim param As OracleParameter 
param = New OracleParameter() 

param.ParameterName = ":myId" 
param.OracleDbType = OracleDbType.Int32 
param.Direction = ParameterDirection.Output ' Tried ReturnValue 

comm.Parameters.Add(param) 

intRecsAffected = comm.ExecuteNonQuery() 
id = comm.Parameters(":myId").Value 

Disconnect() 

Irgendwelche Ideen

+0

Es ist etwas falsch mit Ihrem SQL, aber da Sie es nur teilweise zeigen, kann nicht wirklich helfen. Bitte posten Sie die vollständige sql. – sstan

+0

RETURNING INTO ist PL/SQL-Syntax, nicht SQL, daher müssen Sie einen anonymen PL/SQL-Block verwenden (Umbruch in BEGIN und END) –

Antwort

0

Tatsächlich realisierte, was vor sich ging. Ich schneide meinen vollen SQL, weil es ziemlich lang ist und da sind ein paar sensible Sachen drin.

Das INSERT verwendete SELECT statt VALUES, um die Werte für die Felder abzurufen. Das wird nicht funktionieren - ich vermute, dass ein INSERT mit SELECT mehrere Zeilen hinzufügen kann, obwohl dies in diesem Fall nicht der Fall ist.

Haben Sie die SQL neu geschrieben, um VALUES zu verwenden, und der VB.Net-Code funktioniert einwandfrei.

Danke an alle, die geantwortet haben.