我只是想学点新东西。我只是做了个实验,用循环来分析桌子。但是,我发现错误的地方
对变量'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;有什么建议吗?还是用这个循环分析表的更好方法?谢谢你帮我的忙。:)
发布于 2016-11-14 10:35:26
您需要引用数组的内容,而不是循环索引。循环索引告诉您数组中的哪个元素。所以:
IF (l_table(indx).table_name = 'STUDENT_DETAILS') THEN诸若此类
发布于 2016-11-14 10:35:54
您应该按以下方式引用表中的值:
if (l_table(indx).table_name = 'STUDENT_DETAILS') ...https://stackoverflow.com/questions/40586527
复制相似问题