执行另一个SQL准备的SQL语句

问题描述 投票:0回答:1

是否可以通过在Oracle 12c中的sys表上执行SELECT来执行ALTER INDEX。请看下面

我试图通过下面的select子句找到我已经准备好alter语句的未使用索引 -

SELECT 'alter index ' || owner || '.' || index_name || ' monitoring usage;'
FROM dba_indexes
WHERE owner NOT in (
        'SYSTEM',
        'SYS');

接下来,我将手动将此SQL的输出复制到新的SQL命令选项卡并执行它们。而是可以直接执行这些语句而不是显示它们?

我试图在SQL中实现这一点,作为来自任何SQL实用程序(如DBViz或SQL +)和NOT IN PL / SQL或Unix的单个语句可执行文件。

sql oracle oracle12c
1个回答
6
投票

你可以这两种方式:

1-将结果欺骗到文件并运行文件。

set pages 0 lines 200 feed off term off
spool _file
SELECT 'alter index ' || owner || '.' || index_name || ' monitoring usage;'
FROM dba_indexes
WHERE owner NOT in ('SYSTEM','SYS');
spool off
@_file

1-或通过PL / SQL

BEGIN
   FOR rec in (select owner, index_name FROM dba_indexes WHERE owner NOT in ('SYSTEM','SYS'))
   LOOP
      query := 'alter index ' || rec.owner || '.' || rec.index_name || ' monitoring usage'
      execute immediate query;
   END LOOP;
end;
/
© www.soinside.com 2019 - 2024. All rights reserved.