带有Alter命令的Oracle存储过程

Wil*_*ill 6 sql oracle plsql stored-procedures

我正在尝试构建一个Oracle存储过程,它将接受一个表名作为参数.然后,该过程将重建表中的所有索引.

我的问题是我在使用存储过程的ALTER命令时出错,就像PLSQL不允许该命令一样.

Igb*_*man 11

使用该execute immediate语句在PL/SQL中执行DDL.

create procedure RebuildIndex(index_name varchar2) as
begin
   execute immediate 'alter index ' || index_name || ' rebuild';
end;
Run Code Online (Sandbox Code Playgroud)

我测试了这段代码; 有用.


Jon*_*ler 2

这里有几种可能性。首先,您必须将 SQL 视为动态 SQL。其次,Oracle DDL 语句不能在事务中运行(或者,它们终止当前事务并且本身不能回滚)。这可能会影响您是否可以在存储过程中使用它们,或者可以在何处使用包含它们的存储过程。

如果以上都不适用 - 很容易有其他东西误入歧途 - 我建议发布一些代码。