Ich habe gerade versucht, neue Dinge zu lernen. Ich mache nur ein Experiment, um Tabellen mit Schleifen zu analysieren. Aber, fand ich Fehler, sagteDBMS_STATS mit Looping
‚Ungültige Referenz Variable 'indx'
. Wenn ich das DBMS_STATS-Ding herausnehme und nur das Ergebnis drucke, funktioniert es. Aber als ich versuchte, die Tabellen zu analysieren, kam der Fehler heraus.
CREATE OR REPLACE PROCEDURE ANALYZE_TABLE
AS
CURSOR table_cur IS
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE TABLE_NAME LIKE 'STUDENT%';
table_nm table_cur%ROWTYPE;
TYPE table_nms IS TABLE OF table_nm%TYPE;
l_table table_nms;
BEGIN
OPEN table_cur;
FETCH table_cur BULK COLLECT INTO l_table;
CLOSE table_cur;
FOR indx IN 1..l_table.COUNT LOOP
IF (indx.table_name = 'STUDENT_DETAILS') THEN
dbms_stats.gather_table_stats(ownname => 'ADMIN', tabname => indx.table_name , estimate_percent => 100,
method_opt => 'for all indexed columns size auto',
degree => 4 ,cascade => TRUE);
ELSIF (indx.table_name = 'STUDENT_ALLOWANCE' OR indx.table_name = 'STUDENT_PAYMENT')
THEN
DBMS_STATS.GATHER_TABLE_STATS (ownname => 'ADMIN', tabname => indx.table_name , estimate_percent => 100,
method_opt => 'for all indexed columns size auto',
degree => 4 ,cascade => TRUE);
ELSE
DBMS_STATS.GATHER_TABLE_STATS (ownname => 'ADMIN', tabname => indx.table_name , estimate_percent => 100,
method_opt => 'for all indexed columns size auto',
degree => 4 ,cascade => TRUE);
END IF;
--DBMS_OUTPUT.PUT_LINE(l_table(indx).TABLE_NAME);
END LOOP;
END ANALYZE_TABLE;
Irgendwelche Vorschläge? Oder eine bessere Möglichkeit, Tabellen mit dieser Schleife zu analysieren? Vielen Dank im Voraus für jeden, der mir hilft. :)
Sehr ähnliche Antwort in der exakt gleichen Moment. – Rene
@Rene - tolle Köpfe und all das :) – APC
Wah danke so viel, btw ist es möglich, wenn ich die Analysetabellen parallel machen möchte? so können sie zusammen analysiert werden, keine Notwendigkeit zu warten, bis der andere Tisch analysiert ist. Danke – octoberafternoon