2015-12-30 4 views
0

Я пытаюсь напечатать ключи ассоциативного массива для простой логики, показанной нижеИндекс ассоциативного массива

declare 
    type std_marks_arr is table of number(10) 
     index by BINARY_INTEGER;-- 
    std_marks std_marks_arr; 
    cursor std_id is select student_code from student_master; 
begin 
    for i in std_id 
    loop 
     select sum(marks) into std_marks(i.student_code) from student_marks 
     where student_code=i.student_code; 
    end loop; 
    for i in std_marks.first..std_marks.last 
    loop 
     dbms_output.put_line(rpad(std_marks(i).key,10,' ')||rpad(std_marks(i),10,' ')); 
    end loop; 
end;` 

Сво дает ошибку как 'Invalid reference to variable 'NUMBER' в строке, где я использовал key

Печать Я знаю, что это можно сделать другими способами, но я должен знать, как я могу напечатать индекс в этой ситуации.

+0

Я предполагаю, что 'student_code' является числовым столбцом. –

+0

извините за этот 'student_code', он не должен появляться. это currect один, хотя ошибка остается такой же –

ответ

2

Ваша переменная std_marks имеет тип ассоциативного массива, который не имеет атрибута key (и, действительно, не имеет атрибутов - это всего лишь массив значений).

В коде i это индекс, который будет простым числом, так что вы бы просто использовать это:

for i in std_marks.first..std_marks.last 
loop 
    dbms_output.put_line(rpad(i,10, 
    ' ')||rpad(std_marks(i),10,' ')); 
end loop 

У вас есть несколько других проблем в вашем коде, однако, что остановит его компиляция (например, отсутствующая точка с запятой) и запуск (например, если ваши коды учащихся не образуют серию без пробелов в числовой последовательности, ваш код повысит NO_DATA_FOUND, потому что ваш цикл пытается получить доступ ко всем элементам массива от первого значения индекса до значения последнего индекса, включая пробелы).

+0

это работает спасибо –

Смежные вопросы