Было бы неплохо, если бы это было возможно, но это не простой способ добиться этого.
Что мы можем сделать, это загрузить данные в обычную коллекцию PL / SQL и затем загрузить их вассоциативный массив.Если это быстрее, чем просто зацикливаться на столе, то это просто вопрос: вероятно, это не имеет значения, если мы не имеем дело с большим количеством данных.
Учитывая эти данные теста ...
SQL> select * from t23
2 order by c1
3 /
C1 C2
-- ---
AA ABC
BB BED
CC CAR
DD DYE
EE EYE
ZZ ZOO
6 rows selected.
SQL>
... мы можем заполнить ассоциативный массив в два этапа:
SQL> set serveroutput on
SQL>
SQL> declare
2 type varassoc is table of varchar2(3) index by varchar2(2);
3 vars varassoc;
4
5 type nt is table of t23%rowtype;
6 loc_nt nt;
7
8 begin
9 select * bulk collect into loc_nt from t23;
10 dbms_output.put_line('no of recs = '||sql%rowcount);
11
12 for i in loc_nt.first()..loc_nt.last()
13 loop
14 vars(loc_nt(i).c1) := loc_nt(i).c2;
15 end loop;
16
17 dbms_output.put_line('no of vars = '||vars.count());
18
19 dbms_output.put_line('ZZ = '||vars('ZZ'));
20
21 end;
22 /
no of recs = 6
no of vars = 6
ZZ = ZOO
PL/SQL procedure successfully completed.
SQL>
Реальный вопрос, вероятно, состоит в том, работает ли заполнение ассоциативного массива лучше, чем просто выбор строк в таблице.Конечно, если у вас есть версия 11g Enterprise, вы должны вместо этого рассмотреть кэширование набора результатов .