【发布时间】:2020-10-21 07:58:43
【问题描述】:
我有一个标准的数据库过程来删除在 user1 模式中创建的表(下面的代码)上的索引。当以 user2 身份运行时,“执行立即 'drop index”失败并出现 ORA-01418:指定的索引不存在。
我不明白如何通过光标返回索引,但在运行 drop 命令时不存在。
有人可以帮助解释 user2 对 user1 表/索引的 privs 需求以及应该使用什么 AUTHID?
create or replace procedure dropIndexes(pTableName IN VARCHAR2) AUTHID
CURRENT_USER IS
CURSOR c1(pTableName VARCHAR2) IS
select index_name
from all_indexes
where table_name = pTableName;
BEGIN
FOR c1Rec IN c1(pTableName) LOOP
execute immediate 'drop index user1.'||c1Rec.index_name;
END LOOP;
END dropIndexes;
【问题讨论】:
-
我敢打赌,所有者与
user1不同。SELECT owner, index_name ... -
感谢您指出显而易见的事情。 create index 语句以 user2 的形式运行,形式为 'create index
on user1. ...... 我没有意识到 user2 会拥有索引,我一直认为索引是由表所有者。感谢您的帮助,这解决了问题
标签: plsql