Как я могу выполнить несколько операторов Oracle SQL с .NET - PullRequest
2 голосов
/ 09 февраля 2009

В рамках нашего процесса сборки мы хотим выполнить сценарии SQL, состоящие из операторов DDL и DML, для свежего экземпляра базы данных.

ADO.NET Connection / Command не может справиться с этим без разбора и разделения сценариев.

Утилита командной строки sqlplus может выполнять сценарии только в интерактивном режиме и не подходит для пакетного использования.

Чего мне не хватает? Как можно выполнить сценарии SQL при использовании оракула?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2009

Devdimi,

Я согласен с Эриком К.

И да, вы можете включить DDL в анонимный блок.

DECLARE
BEGIN
     EXECUTE IMMEDIATE 'TRUNCATE TABLE foo';
END;

Помните, что DDL делает коммит ДО и ПОСЛЕ того, как он выполняется. Так что, как часть сделки, это отчасти отстой.

2 голосов
/ 09 февраля 2009

Почему вы считаете, что утилита SQL Plus не подходит для пакетного использования? Довольно часто его используют для запуска таких сценариев - вы можете передать сценарий в SQL Plus, когда вызываете его, если хотите, т.е.

sqlplus scott/tiger@someDatabase @someScript.sql

Это довольно распространенный способ развертывания сборок.

Если проблема в том, как SQL * Plus обрабатывает ошибки, вы можете просто добавить строку

WHENEVER SQLERROR EXIT SQL.SQLCODE

, чтобы прервать и выбросить номер ошибки Oracle, который был обнаружен. Документация для команды WHENEVER SQLERROR также содержит ряд других опций.

1 голос
/ 09 февраля 2009

Я думаю, что вы можете сделать это, если заключите утверждение в DECLARE / BEGIN / END. У меня больше нет доступа к Oracle, поэтому я не могу проверить его. Пример:

DECLARE
BEGIN
    INSERT INTO ...;
    UPDATE something ...;
END;

Поскольку вы хотите выполнить DDL, используйте EXECUTE IMMEDIATE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...