在PL / SQL中使用分析索引[INDEX]验证结构

我正在尝试从oracle数据库中的所有用户索引获取索引统计信息,我注意到“分析索引[INDEX]验证结构”可以一次使用,因此我尝试在pl / sql过程如下:

DeclARE
    aux index_stats%ROWTYPE;
    CURSOR names
    IS
        SELECT index_name 
        FROM user_indexes
        WHERE table_owner = 'STUDENT';
BEGIN
    FOR each IN names
    LOOP
        analyze index each.index_name validate structure; --This line
        select name
        into aux
        from index_stats;
        dbms_output.put_line( aux.index_name);
        -- Do something with index_stats info
    END LOOP;
END;
/

因此,每次循环时,表index_stats都会使用下一个用户索引进行更新,但这是行不通的。显示此错误:

当出现以下情况之一时遇到符号“ INDEX”: :=。 (@%;

是否可以在PL / SQL中使用使用分析索引[INDEX]验证结构,还是只需要找到另一种方法?

我在pl / sql过程中未发现有关使用分析索引的任何信息。 我找到了dbms_stats.gather_index_stats函数,但不适用于stats_index表

angel_ww 回答:在PL / SQL中使用分析索引[INDEX]验证结构

您需要使用execute immediate

来换行

execute immediate 'analyze index '||each.index_name||' validate structure';

因为该命令既不是DML也不是SELECT语句。

并删除此声明

select name
  into aux
  from index_stats

没有意义,索引名称已经返回。

然后直接通过

打印索引的名称

dbms_output.put_line( each.index_name );

本文链接:https://www.f2er.com/3142239.html

大家都在问