Использование анализа индекса [INDEX] для проверки структуры в PL / SQL - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить статистику индекса по всем пользовательским индексам в базе данных 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" при ожидании одного из следующих действий:: =. (@%;

Есть ли способ, которым я могу использовать Используя анализ индекса [INDEX] проверить структуру в PL / SQL или мне просто нужно найти другой способ сделать это?

Я не нашел ничего об использовании анализа индекса в процедуре pl / sql. Я нашел функцию dbms_stats.gather_index_stats, но она не работает с таблицей stats_index

1 Ответ

1 голос
/ 07 ноября 2019

вам нужно обернуть эту строку в 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 );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...