尝试在sql块中更改表时获取错误

Vic*_*tor 26 oracle oracle11g

我创建了一个test.sql文件,里面我放了:

begin
alter table table1 enable row movement;
alter table table1 shrink space;
end;
/
Run Code Online (Sandbox Code Playgroud)

这是不允许的?因为我收到错误:

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
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 45

您不能在PL/SQL块中将DDL作为静态SQL发出.如果要将这些命令放在PL/SQL块中,则需要使用动态SQL,即

BEGIN
  EXECUTE IMMEDIATE 'alter table table1 enable row movement';
  EXECUTE IMMEDIATE 'alter table table1 shrink space cascade';
END;
/
Run Code Online (Sandbox Code Playgroud)

但是,发布连续的SQL语句而不是发出单个PL/SQL块可能更容易.