2016-09-28 6 views
0

Ich würde etwas Hilfe brauchen, ich versuche, eine Prozedur in ORACLE PL/SQL zu erstellen, die die Liste der instabilen Indizes aus der Tabelle dba_indexes erhalten würde und diese select-Anweisung würde auch aufbauen Anweisung zum Reparieren/Ändern des Indexes.ORACLE Prozedur, Variablen und Handhabung mit Daten

So habe ich SQL-Anweisung, die die alter-Anweisungen generiert.

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

Und der Ausgang ist:

alter index OWNER.INDEX_NAME rebuild online; 

Welche perfekt ist, und das ist auch das Endergebnis dann muß ich nur noch das Verfahren erhalte korrekt zu arbeiten und alte Anweisungen ausführen, wenn es eine ist, wenn nicht nur den Vorgang beenden.

Jetzt meine Frage wäre, wie kann ich Daten von SELECT-Anweisung auf 1 Variable speichern? Danach werde ich nur überprüfen, ob die Variable NULL ist oder nicht, wenn null ich die Prozedur beende, wenn nicht null, würde ich diese Variable einfach ausführen?

Ist das möglich und wie?

Vielen Dank für Ihre Hilfe.

+0

Holen Sie sich einfach die Anzahl von dba_indexes in eine Variable in PLSQL-Block. Wenn der Zählerstand größer als 0 ist, fahren Sie mit dem Erstellen der alter-Anweisungen fort, andernfalls exit. – hemalp108

Antwort

0

Sie brauchen nicht unbedingt eine Variable; Sie können eine Schleife über Ihre Abfrage verwenden:

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; 

Dies wird die Aufgabe für jeden Index in der Abfrage einfach tun oder nichts tun, wenn die Abfrage keine Indizes zurückgibt.

Verwandte Themen