Pregunta

Estoy usando el proveedor OLEDB para ADO.Net la conexión a una base de datos de Oracle.En mi bucle, estoy haciendo un insert:

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)

La primera inserción se realiza correctamente, pero el segundo da un error:

ORA-00933: SQL command not properly ended

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

A mí me parece que le falta 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)
;
Trate de añadir la ; y háganoslo saber.

Otros consejos

En .neto, cuando se intenta ejecutar una sola instrucción SQL de Oracle con un punto y coma al final.El resultado será un error de oracle:ora-00911:carácter no válido.OK, figura que una instrucción SQL no es necesario el punto y coma, pero, ¿qué acerca de la ejecución de 2 instrucción 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 el 2 de Oracle instrucciones SQL con una BEGIN y END; la 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 ';' sólo se utiliza en sqlplus.Cuando se utiliza ODBC/JDBC, OLEDB, etc usted no pone un punto y coma al final de su declaración.En el caso en que se ejecutan 2 declaraciones diferentes, así que la mejor manera de manejar el problema es el uso de 2 declaraciones en lugar de tratar de combinar en una sola declaración, ya que no puedo usar el punto y coma.

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

Oracle SQL utiliza un semi-colon ;como al final de su declaración marcador.

usted tendrá que añadir el ;después de molestar a insertar instrucciones.

NB:que también asume ADODB permitirá a los 2 insertos en una sola llamada.

la alternativa podría ser la envoltura de las dos llamadas en un bloque,

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

En mi bucle no se me vuelva a iniciar mi StringBuilder ...así, los múltiples instrucción insert que he publicado.

Gracias por tu ayuda de todos modos!!

Es un tiro largo, pero en la primera inserción de sql formato de fecha es válida tanto para reino unido/estados unidos, la segunda inserción no es válida si el Oracle DB es el programa de instalación para el reino unido formato de fecha, me doy cuenta de que ha usado la función TO_DATE, pero no veo nada ...

Es el punto y coma se necesita de OLE_DB ?No se necesita de la mayoría de la API ?

El ADO.NET proveedor de OLE DB para genérica de acceso a los datos donde usted no tiene un proveedor específico para la base de datos.El uso de OracleConnection et al en preferencia a OleDbConnection para una conexión de base de datos Oracle.

Además, el punto y coma problema, le recomendamos que busque en las variables vinculadas.No usar de ellos puede causar la base de datos de los problemas de rendimiento en la carretera.El código también tiende a ser más limpio.

El problema puede ser que usted tiene un parámetro variable es null se inserta en la consulta.Eso era lo que era mi problema.Una vez que me dio el parámetro valor predeterminado es una cadena vacía, se trabajó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top