【发布时间】:2019-04-17 19:00:01
【问题描述】:
我想动态重命名索引。
背景故事:如果基表有主键(我认为?),Oracle 会自动在物化视图上创建索引。每次删除和创建 MV 时,该索引的名称都会更改。我想重命名那个索引。
我的计划是选择索引名称,然后将其放入 alter 语句中。
Select table_owner||'.'||INDEX_Name
from all_indexes
WHERE table_name = 'mytable'
and table_owner = 'myuser'
and uniqueness = 'UNIQUE';
ALTER INDEX (that select statement here)
RENAME TO abetterindexname
但这引发了这个错误:
ORA-00953: missing or invalid index name
我在发布之前想出了我的答案。这是有效的:
DECLARE
avariable varchar2(100);
BEGIN
Select table_owner||'.'||INDEX_Name
into avariable
from all_indexes
WHERE table_name = 'mytable'
and table_owner = 'myuser'
and uniqueness = 'UNIQUE';
execute immediate 'ALTER INDEX '||avariable||' RENAME TO abetterindexname';
END;
来源:https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:7038453003289。 -- 我必须为立即执行语句构建一个字符串。
如果有人知道如何仅使用 sql 执行此操作,我会很感兴趣。
【问题讨论】:
-
您应该edit 问题并将回答路径移动到您接受的答案。