Ошибка при попытке изменить таблицу в блоке sql
Я создаю файл 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
Вы не можете выдавать 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.