Ассоциативный массив: цикл по коллекции с ключом varchar2
27 Июль 2017
1 комментарий
Пример заполнения ассоциативного массива и цикл для вывода данных.
Ключом является строка 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)

Последние комментарии