Ассоциативные массивы (Associative Arrays)

Ассоциативные массивы
Вариант вложенной таблицы, в которой элементы могут иметь произвольные значения индексов, расположенные в определенном порядке.
Позволяет работать со столбцами как с единой переменной — массивом.
Является временной формой коллекции, существует в течении сессии.
Другое название ассоциативных массивов — индексированные таблицы или pl\sql таблицы.
Ассоциативный массив это наиболее часто используемый вид коллекции. Его не надо инициализировать или расширять. В Oracle9i Database Release 2 и более поздних версиях ассоциативные массивы можно индексировать не только по числам, но и по строкам.
Пример 1: INDEX BY PLS_INTEGER
SQL> set serveroutput on size unlimited; SQL> DECLARE 2 TYPE XX_COST_TYPE IS TABLE OF NUMBER INDEX BY PLS_INTEGER; 3 cost XX_COST_TYPE; 4 l_res NUMBER; 5 BEGIN 6 cost(1) := 5 ; 7 cost(20) := 10 ; 8 cost(12) := 15 ; 9 l_res := cost(1) + cost(20) + cost(12); 10 DBMS_OUTPUT.PUT_LINE(l_res); 11 END; 12 / 30 PL/SQL procedure successfully completed
Пример 2: INDEX BY VARCHAR2
SQL> DECLARE
2 TYPE XX_COST_TYPE IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
3 cost XX_COST_TYPE;
4 L_SELECTED VARCHAR2(100) := 'CHAIR';
5 BEGIN
6 cost('TABLE') := 5000;
7 cost('CHAIR') := 84020 ;
8 cost('LAMP') := 8300;
9 cost('PENCIL'):= 110;
10 DBMS_OUTPUT.PUT_LINE(cost(L_SELECTED));
11 END;
12 /
84020
PL/SQL procedure successfully completed
Ограничения:
Нельзя создать тип ассоциативного массива на уровне схемы:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> CREATE OR REPLACE TYPE xx_test_type IS TABLE OF NUMBER INDEX BY PLS_INTEGER
2 /
Warning: Type created with compilation errors
Предупреждение: Тип создан с ошибками компиляции.
SQL> show errors
Ошибки для TYPE XX_TEST_TYPE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/22 PLS-00355: использование таблицы pl/sql не разрешается в этом
контексте


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