我需要执行查询
EXEC SYS.DBMS_STATS.LOCK_TABLE_STATS('MCCANE', 'SDE_LOGFILE_DATA');
(MCCANE是用户之一)。有办法吗?
答案 0 :(得分:1)
假设您要对数据库中的所有表(共享相同的名称)执行相同的操作。如果是这样,请编写一段代码使之成为可能。为此,
DBA_TABLES
,L_STR
变量中),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>