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