variable pedir parametros consulta con comando sql oracle ora-00933

pedir - ORA-00933: el comando SQL no finalizó correctamente



consulta con parametros sql server (10)

¿Se necesita el punto y coma de OLE_DB? No es necesario en la mayoría de las API?

Estoy usando el proveedor OLEDB para ADO.Net conectando a una base de datos Oracle. En mi ciclo, estoy haciendo una inserción:

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)

El primer inserto tiene éxito pero el segundo da un error:

ORA-00933: SQL command not properly ended

¿Qué estoy haciendo mal?


El proveedor ADO.NET OLE DB es para acceso a datos genéricos donde no tiene un proveedor específico para su base de datos. Use OracleConnection et al con preferencia a OleDbConnection para una conexión de base de datos Oracle.


En mi ciclo, no estaba reinicializando mi StringBuilder ... por lo tanto, la declaración de inserción múltiple que publiqué.

¡¡Gracias por tu ayuda de todos modos!!


Es una posibilidad remota, pero en el primer inserto el formato de fecha sql es válido para ambos uk / us, el segundo inserto no es válido si el Oracle DB está configurado para el formato de fecha del Reino Unido, me doy cuenta de que ha usado la función TO_DATE pero no ver algo más ...


Oracle SQL usa un punto y coma; como su marcador de final de frase.

deberás agregar el; después de molestar, inserte las declaraciones.

NB: eso también supone que ADODB permitirá 2 inserciones en una sola llamada.

la alternativa podría ser envolver ambas llamadas en un bloque,

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


semi colon después de la primera inserción?


Además del problema del punto y coma, recomiendo encarecidamente que busque variables de vinculación. No usarlos puede causar problemas de rendimiento de la base de datos en el futuro. El código también tiende a ser más limpio.


Para mí, parece que te estás perdiendo un ; entre las dos declaraciones:
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)
;
Prueba agregar el ; y háganos saber.


En .NET, cuando tratamos de ejecutar una única declaración SQL de Oracle con un punto y coma al final. El resultado será un error de oráculo: ora-00911: carácter no válido. De acuerdo, imagina que una declaración de SQL no necesita el punto y coma, pero ¿qué ocurre con la ejecución de 2 sentencias de SQL en una cadena, por ejemplo?

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)

El código anterior le dará el mismo error de Oracle: ora-00911: carácter no válido.

La solución a este problema es envolver sus 2 declaraciones SQL de Oracle con BEGIN y END; sintaxis, por ejemplo:

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

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


En Oracle, el punto y coma '';'' solo se usa en sqlplus. Cuando usa ODBC / JDBC, OLEDB, etc., no coloca un punto y coma al final de su extracto. En el caso anterior, en realidad estás ejecutando 2 declaraciones diferentes, por lo que la mejor manera de manejar el problema es usar 2 instrucciones en lugar de intentar combinarlas en una sola declaración, ya que no puedes usar el punto y coma.