В комментариях мы разработали ответ для вас. Чтобы вы получили официальный «ответ», вот он с сайта OracleOverflow (см. Ниже):
OracleCommmand может одновременно выполнять только 1 оператор sql или plsql. Нет необходимости разделять несколько операторов.
Точка с запятой является частью документации для разделения нескольких операторов. Это не часть единого оператора DDL. Для OracleCommand нет необходимости добавлять точку с запятой, потому что он может обрабатывать только один оператор за раз.
Редактировать: это была исходная ссылка, которая теперь не работает: http://www.oracleoverflow.com/questions/145/running-ddl-through-an-oraclecommand-without-the-semicolon
Альтернатива: http://web.archive.org/web/20100806014022/http://www.oracleoverflow.com/questions/145/running-ddl-through-an-oraclecommand-without-the-semicolon
Вопрос:
При попытке запустить серию команд DDL через OracleCommand
объект, я получаю ORA-00911 «недопустимый символ», если я включаю
последняя точка с запятой, хотя это часть синтаксиса SQL в
документация. Это также означает, что вы можете выполнить только один SQL
оператор за раз, вместо того, чтобы выполнять весь сценарий SQL одновременно,
что мне кажется очень странным.
Немного погуглив, я обнаружил, что обходной путь - обернуть DDL
в инструкции EXECUTE IMMEDIATE PL / SQL, но, опять же, он завершится неудачно, если
DDL имеет точку с запятой в конце (кроме операторов создания PL / SQL,
которые требуют точки с запятой).
Кто-нибудь знает причину такого поведения? Точка с запятой находится в
синтаксическая документация, поэтому я бы предположил, что это всегда
требуется, но не получается, если точка с запятой включена ...
Ответ здесь:
OracleCommmand может одновременно выполнять только 1 оператор sql или plsql.
Нет необходимости разделять несколько операторов.
Точка с запятой является частью документации для разделения нескольких операторов.
Это не часть единого оператора DDL. Для OracleCommand есть
нет необходимости добавлять точку с запятой, потому что она может обрабатывать только один
заявление за один раз.
ДОБАВЛЕНО: Вы можете связать более одного оператора в BEGIN ... END;
Блок (да, это заканчивается точкой с запятой). Но это заявления должны быть
Вызовы функций DML, DDL или PL / SQL. Вы не можете связать несколько SELECT
заявления в НАЧАЛО ... КОНЕЦ; Блок.
Комментарии:
Почему OracleCommand имеет такое ограничение, что может запускать только 1 оператор за раз?
Он основан на спецификации DbCommand в ADO.Net. Это не только ограничение OracleCommand.
SqlCommand допускает несколько операторов в одной команде, которая должна быть просто «дополнением» для SQL Server.