Выполнить несколько команд в одном ExecuteScalar в Oracle - PullRequest
6 голосов
/ 26 марта 2009

У меня есть пакет SQL-операторов, таких как ...

вставить в ....; вставить в ....; удалить .........;

и т.д.

Когда я пытаюсь выполнить их против оракула, это дает мне эту ошибку (ORA-00911 Invalid Character)

Теперь я могу понять, что это из-за точки с запятой между операторами, я попробовал это на SQL Server, и это сработало, но в Oracle пока не повезло.

Есть ли способ запустить несколько операторов против Oracle с помощью ExecuteScalar или какой-либо другой функции?


DUPLICATE : Как выполнить несколько операторов Oracle SQL с помощью .NET

Ответы [ 2 ]

7 голосов
/ 26 марта 2009

Попробуйте обернуть с BEGIN..END

BEGIN insert into.... ; insert into.... ; delete .........; END;
0 голосов
/ 26 марта 2009

попытка НАЧАТЬ КОНЕЦ не сработала для меня.

Что я сделал, так это сделал новый метод, который дает соединение (я стараюсь свести к минимуму мои открытые соединения), он разделяет операторы, используя; в качестве разделителя и работает каждый по отдельности

    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();
    }

Мое вдохновение пришло от этой записи после Петрос рассказал мне об этом

PS Возможно, вам придется изменить его в соответствии с вашими потребностями, в моем случае я требую, чтобы соединение было открытым и соответствующим образом закрыто, если что-то произойдет с вызывающей стороной.

...