2016-09-28 4 views
0

私はいくつかの助けが必要です、私はORACLE PL/SQLでテーブルを作成しようとしていますdba_indexesテーブルから不安定なインデックスのリストを取得し、索引を修正/変更するための文。ORACLEプロシージャ、変数およびデータの処理

私は、変更ステートメントを生成するSQLステートメントを持っています。

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

、出力は次のとおりです。完璧で、これはまた、最終的な結果である

alter index OWNER.INDEX_NAME rebuild online; 

が、私はちょうどもしあればがあれば正常に動作し、ALTER文を実行するための手順を取得する必要がありますプロシージャを終了するだけではありません。

私の質問は、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; 

これは単にあなたのクエリ内のすべてのインデックスのために仕事をする、またはクエリがインデックスを返さない場合は何もしません。

関連する問題