带循环的DBMS_STATS

时间:2016-11-14 10:26:57

标签: oracle plsql

我只是想学习新事物。我只是做一个实验来分析循环表。但是,我发现错误说

  

'变量< indx'

的引用无效

。如果我拿出DBMS_STATS'只是打印结果,它的工作原理。但是当我试图分析表时,出现了错误。

 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;

有什么建议吗?或者用这个循环分析表的更好方法是什么? 提前感谢任何帮助我的人。 :)

2 个答案:

答案 0 :(得分:1)

您需要引用数组的内容,而不是循环索引。循环索引告诉您数组中的哪个元素。所以:

IF (l_table(indx).table_name = 'STUDENT_DETAILS') THEN

等等

答案 1 :(得分:0)

您应该如下引用表格中的值:

 if (l_table(indx).table_name = 'STUDENT_DETAILS') ...