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

¿Fue útil?

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.

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