【问题标题】:What permissions are needed for PLSQL execute immediate drop indexPLSQL执行立即删除索引需要什么权限
【发布时间】: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


【解决方案1】:

我想知道为什么不使用 all_indexes 的 owner 字段来构造 SQL。更好的是,将 user1 推送到查询中,这样我们就只能获取属于 user1 的索引名称。

【讨论】:

    猜你喜欢
    • 2022-06-11
    • 2016-02-11
    • 2018-04-19
    • 2011-06-15
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多