Ошибка при попытке изменить таблицу в блоке SQL - PullRequest
25 голосов
/ 28 сентября 2011

Я создаю файл test.sql и внутри помещаю:

begin
alter table table1 enable row movement;
alter table table1 shrink space;
end;
/

Разве это не разрешено? Потому что я получаю ошибку:

Encountered the symbol "ALTER" when expecting one of the following:

   begin case declare exit for goto if loop mod null pragma
   raise return select update while with <an identifier>
   <a double-quoted delimited-identifier> <a bind variable> <<
   close current delete fetch lock insert open rollback
   savepoint set sql execute commit forall merge pipe

1 Ответ

44 голосов
/ 28 сентября 2011

Нельзя выдавать DDL как статический SQL в блоке PL / SQL. Если вы хотите поместить эти команды в блок PL / SQL, вам нужно использовать динамический SQL, т.е.

BEGIN
  EXECUTE IMMEDIATE 'alter table table1 enable row movement';
  EXECUTE IMMEDIATE 'alter table table1 shrink space cascade';
END;
/

Однако может быть проще просто выдавать последовательные операторы SQL, а не один блок PL / SQL.

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