2009-03-26 12 views
6

Tengo un lote de sentencias SQL como ...Ejecutar comandos múltiples en uno ExecuteScalar en Oracle

insertar en ....; insertar en ....; borrar .........;

etc

Cuando trato de ejecutar contra oráculo me da this error (ORA-00911 carácter no válido)

Ahora puedo entender que esto es debido al punto y coma entre las declaraciones, he intentado esto en SQL Server y funcionó, pero en Oracle no tuvo suerte hasta el momento.

¿Hay alguna forma de ejecutar sentencias múltiples contra Oracle utilizando ExecuteScalar o alguna otra función?


DUPLICADO: How can I execute multiple Oracle SQL statements with .NET

Respuesta

7

envoltura Probar con un BEGIN..END

BEGIN insert into.... ; insert into.... ; delete .........; END; 
+0

trabajado para mí en SQL Developer. Después de recordar el; después de FIN. –

+0

Esto funcionó para mí en Oracle EM. –

0

tratando al final no funciona para mí comenzar.

Lo que hice fue hacer un nuevo método que, dado una conexión (trato de minimizar mis conexiones abiertas) divide las declaraciones usando; como delimitador y se ejecuta cada uno éste por separado

private void ExecuteSql(string statements, IDbConnection conn) 
    { 
     IDbCommand cmd = conn.CreateCommand(); 
     string[] commands = statements.Split(new string[] { ";\r\n", "; ", ";\t", ";\n" }, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string c in commands) 
     { 
      cmd.CommandText = c; 
      cmd.CommandType = CommandType.Text; 
      cmd.ExecuteNonQuery(); 
     } 

     cmd.Dispose(); 
    } 

Mi inspiración vino de this puesto después Petros me lo contó

PS puede que tenga que cambiar de acuerdo a sus necesidades, en mi caso yo requiero la conexión para ser abierto, y cerrado en consecuencia si sucede algo de la persona que llama.

Cuestiones relacionadas