2016-09-28 45 views
0

我需要一些帮助,我想在ORACLE PL/SQL中构建一个过程,它将从表dba_indexes中获取不稳定索引的列表,并且此选择语句也将构建声明来修复/改变索引。ORACLE过程,变量和数据处理

所以我有SQL语句生成alter语句。

SELECT 'alter index '||owner||'.'||index_name||' rebuild online; ' 
FROM dba_indexes 
WHERE status = 'N/A'; 

,输出是:

alter index OWNER.INDEX_NAME rebuild online; 

这是完美的,这也是最终结果,那么我就必须让程序能够正常工作和执行ALTER语句,如果有任何if不是那么完成程序。

现在我的问题是如何将数据从SELECT语句保存到1个变量?之后,我将只检查变量是否为NULL,如果为null,则结束过程,如果不为null,则只执行此变量?

这是可能的和如何?

非常感谢您的帮助。

+0

只需将dba_indexes的计数值转换为plsql块中的变量即可。如果计数大于0,则继续动态构建alter语句,否则退出。 – hemalp108

回答

0

你不一定需要一个变量;你可以使用一个循环在你的查询:

begin 
    for s in (
        SELECT 'alter index '||owner||'.'||index_name||' rebuild online' as statement 
       FROM dba_indexes 
       WHERE status = 'N/A' 
      ) 
    loop 
     dbms_output.put_line(s.statement); 
     execute immediate s.statement; 
    end loop; 
end; 

这将只是做了各项指标的工作在您的查询,或者什么也不做,如果查询没有返回索引。