PLSQL Oracle Command не допускает множественных исключений в одной команде - PullRequest
0 голосов
/ 13 декабря 2018

Я храню следующий скрипт на C # OracleCommand.Когда я выполняю его, я получаю

"встретил символ" / "при ожидании одного из следующих:" ошибки.

Я пытаюсь массово создать множество таблиц, проверяя, существуют ли они первыми, и удаляя их, если они есть.

BEGIN
EXECUTE IMMEDIATE 'DROP TABLE allexact';
EXCEPTION
WHEN OTHERS THEN NULL;
EXECUTE IMMEDIATE '
CREATE TABLE allexact
(
t_long long NULL,
t_binFloat binary_float NULL,
t_binDbl binary_double NULL,
t_rowid rowid NULL,
t_date date NULL,
t_blob BLOB NULL,
t_CLOB CLOB NULL,
t_NCLOB NCLOB NULL
)';
END;//
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE chr_1';
EXCEPTION
WHEN OTHERS THEN NULL;
EXECUTE IMMEDIATE '
CREATE TABLE chr_1
(
chr_1 char(1) NULL,
chr_2 char(2) NULL,
chr_3 char(3) NULL,
chr_4 char(4) NULL,
...
chr_60 char(60) NULL
)';
END;//

Эта команда прекрасно работает в plsql developer, но не при выполнении в C # как команда в качестве команды.Если у меня есть только 1 исключение в нижней части всего кода, оно работает нормально, но как только исключение срабатывает, тогда (как и ожидалось) остальная часть кода пропускается.Как поместить несколько операторов исключения в команду plsql, которая хранится в переменной C # OracleCommand?

1 Ответ

0 голосов
/ 13 декабря 2018

Используя OracleCommand, вы можете выполнить только 1 оператор SQL или 1 хранимую процедуру или 1 анонимный блок (ваш случай).Но вы прошли 2 анонимных блока.Отсюда и ошибка.Попробуй упаковать все в 1 блок

begin
   begin 
     EXECUTE IMMEDIATE . . . 
     EXECUTE IMMEDIATE . . . 
   exception when
   end;

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