我只是想学习新事物。我只是做一个实验来分析循环表。但是,我发现错误说
'变量< 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;
有什么建议吗?或者用这个循环分析表的更好方法是什么? 提前感谢任何帮助我的人。 :)
答案 0 :(得分:1)
您需要引用数组的内容,而不是循环索引。循环索引告诉您数组中的哪个元素。所以:
IF (l_table(indx).table_name = 'STUDENT_DETAILS') THEN
等等
答案 1 :(得分:0)
您应该如下引用表格中的值:
if (l_table(indx).table_name = 'STUDENT_DETAILS') ...