oracle - 尝试更改 sql block 中的表时出现错误

标签 oracle oracle11g

我创建了一个 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

最佳答案

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

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

但是,仅发出连续的 SQL 语句可能比发出单个 PL/SQL block 更容易。

关于oracle - 尝试更改 sql block 中的表时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7575887/

相关文章:

sql - 一个表 ORACLE SQL 中多个字段的不同值

linux - 在 Arch Linux 中安装 Oracle Database Express Edition 11g 第 2 版

java - 未找到使用 jaydebeapi 连接到 oracle DB 的驱动程序

oracle - Initcap 跳过小于 4 个字符的单词

c# - 在将数据插入 oracle 数据库代码时,使用带有 Entity Framework 的 MVC 自动为 id 生成值 0

oracle - 如何增加 Oracle SQL Developer 18.1 的 GUI/字体/所有内容的大小

oracle - TNS-12505 : TNS:listener does not currently know of SID given in connect descriptor

java - 使用实体对象进行数据库管理

oracle - 删除触发器后无法删除的回收站对象

sql - Oracle触发器更新同一个表