Пример заполнения ассоциативного массива и цикл для вывода данных.
Ключом является строка varchar2(1):
declare -- объявление типа TYPE resultRec is record ( ready varchar2(1), cnt number ); type resultTab is table of resultRec INDEX BY VARCHAR2(1); -- p_iter varchar2(1); -- итератор p_validation_res_tbl resultTab; -- экземпляр коллекции -- -- запись данных в коллекцию procedure put_result(p_ready varchar2) is begin if (p_validation_res_tbl.exists(p_ready)) then p_validation_res_tbl(p_ready).cnt := p_validation_res_tbl(p_ready).cnt + 1; else p_validation_res_tbl(p_ready).ready := p_ready; p_validation_res_tbl(p_ready).cnt := 1; end if; end; begin -- запись данных в коллекцию через вспомогательную процедуру put_result('E'); put_result('E'); put_result('S'); put_result('W'); -- первичное выставление итератора коллекции p_iter := p_validation_res_tbl.FIRST; -- проверка, на то, что коллекция не пустая if (p_iter is null) then dbms_output.put_line('p_validation_res_tbl is null'); else -- цикл по коллекции WHILE p_iter IS NOT NULL LOOP -- Пример оращения к данным p_validation_res_tbl(p_iter).cnt, где -- p_validation_res_tbl: экземпляр коллекции -- p_iter : текущий итератор -- cnt : поле из record resultRec dbms_output.put_line(p_validation_res_tbl(p_iter).ready ||':' ||p_validation_res_tbl(p_iter).cnt ||' row(s)'); -- получение следующей записи p_iter := p_validation_res_tbl.NEXT(p_iter); END LOOP; end if; end; > E:2 row(s) S:1 row(s) W:1 row(s)
Гениально, спасибо!