с помощью команды EXEC SYS.DBMS_STATS.LOCK_TABLE_STATS для нескольких пользователей - PullRequest
0 голосов
/ 28 января 2019

Мне нужно выполнить запрос

EXEC SYS.DBMS_STATS.LOCK_TABLE_STATS('MCCANE', 'SDE_LOGFILE_DATA');

для нескольких пользователей одновременно (MCCANE является одним из пользователей).Есть ли способ сделать это?

1 Ответ

0 голосов
/ 28 января 2019

Предположим, вы хотите сделать то же самое для всех таблиц (которые имеют одно и то же имя) в вашей базе данных.Если это так, напишите фрагмент кода, который сделает это возможным.Для этого

  • перебирает DBA_TABLES,
  • поиск пользователя (т.е. owner ), которому принадлежит такая таблица,
  • составьте оператор (в мою L_STR переменную),
  • отобразите его первым (чтобы убедиться, что он написан правильно) и - если это так -
  • запустите его как динамический SQL (execute immediate).

Вот пример;Я делаю это с помощью таблицы DEPT (поскольку у меня нет SDE_LOGFILE_DATA).

SQL> show user
USER is "SYS"
SQL> set serveroutput on
SQL> declare
  2    l_str varchar2(100);
  3  begin
  4    for cur_r in (select owner from dba_tables
  5                  where table_name = 'DEPT'
  6                 )
  7    loop
  8      l_str := q'[sys.dbms_stats.lock_table_stats(']' || cur_r.owner || q'[', 'DEPT')]';
  9      l_str := 'begin ' || l_str ||'; end;';
 10      dbms_output.put_line(l_str);     -- if everything's OK, comment this ...
 11      -- execute immediate l_str;      -- ... and uncomment that
 12    end loop;
 13  end;
 14  /
begin sys.dbms_stats.lock_table_stats('MIKE', 'DEPT'); end;
begin sys.dbms_stats.lock_table_stats('HR', 'DEPT'); end;
begin sys.dbms_stats.lock_table_stats('SCOTT', 'DEPT'); end;

PL/SQL procedure successfully completed.

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