2016-09-28 49 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; 

這將只是做了各項指標的工作在您的查詢,或者什麼也不做,如果查詢沒有返回索引。