Ejecutar varios comandos en una ExecuteScalar en Oracle
-
22-08-2019 - |
Pregunta
Tengo un lote de instrucciones SQL como ...
insertar en ....; insertar en.... ; eliminar .........;
etc.
Cuando intento ejecutar contra Oracle Me da este 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 sin suerte hasta ahora.
¿Hay una manera de ejecutar varias declaraciones en contra de Oracle mediante el ExecuteScalar o alguna otra función?
Duplicar ¿Cómo puedo ejecutar múltiples sentencias SQL de Oracle con .NET
Solución
Trate de envolver con un BEGIN..END
BEGIN insert into.... ; insert into.... ; delete .........; END;
Otros consejos
probar el FIN COMENZAR no funcionó para mí.
Lo que hice fue hacer un nuevo método que da una conexión (i tratar de minimizar mis conexiones abiertas) que divide las declaraciones utilizando el; como un 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 este post después Petros me habló de él
PS puede que tenga que cambiar de acuerdo a sus necesidades, en mi caso yo requiero que la conexión sea abierta y cerrada en consecuencia si sucede algo de la persona que llama.