Записи и коллекции в PL/SQL, страница 5

END;

2.3.2. Метод DELETE

CREATE PROCEDURE my_del (p_List  IN OUT List_t) IS

I_ot    NUMBER := p_List.FIRST;

I_do   NUMBER := p_List.NEXT(I_ot);

BEGIN

IF (p_List.COUNT>0) then

IF (I_do IS NOT NULL) THEN

p_List.DELETE(I_ot, I_do);

ELSE

p_List.DELETE;

END IF;

END IF;

END;

2.3.3. Метод EXISTS

CREATE PROCEDURE my_empty (p_List  IN OUT List_t) IS

BEGIN

IF (p_List.EXISTS(2)) then

p_List(2)  :=  NULL;

END IF;

END;

2.3.4. Метод EXTEND

CREATE PROCEDURE my_value (p_List  IN OUT List_t) IS

BEGIN

p_List. EXTEND;

p_List(p_List.LAST)  :=  ‘-’;

END;

2.3.5. Методы FIRST и LAST

CREATE PROCEDURE my_ send (p_List  IN OUT List_t) IS

BEGIN

FOR idx  IN  p_List. FIRST .. p_List. LAST   LOOP

send_email(idx);

END LOOP;

END;

2.3.6. Метод LIMIT

IF my_List.LAST < my_List. LIMIT  THEN

my_List.EXTEND;

END IF;

2.3.7. Методы PRIOR и NEXT

CREATE FUNCTION cnt_Totl (p_List  IN List_t) RETURN NUMBER IS

idx   NUMBER :=  p_List.FIRST;

Ttl   NUMBER :=  0;

BEGIN

LOOP

EXIT WHEN idx IS NULL;

Ttl  :=  Ttl  +  p_List(idx);

Idx  :=  p_List.NEXT (idx);

ENDLOOP;

RETURN  Ttl;

END;

2.3.8. Метод TRIM

CREATE FUNCTION val_last (p_List  IN List_t) RETURN NUMBER IS

l_val   NUMBER;

BEGIN

IF p_List.COUNT>0 THEN

l_val  :=  p_List(p_List.LAST);

p_List.TRIM

END IF;

RETURN  l_val;

END;

2.4. Работа с коллекциями

2.4.1. Инициализация коллекций

Ассоциативные массивы не требуют явной инициализации.

Инициализация вложенных таблиц и массивов VARRAY:

§  явно, с помощью конструктора

§  неявно, путем непосредственного присваивания содержимого другой переменной-коллекции

§  неявно, путем выборки записей из базы данных

DECLARE

my_List   List_t  :=  List_t(‘RED’,’GREEN’);

BEGIN

. . .

END;

DECLARE

my_List   List_t  :=  List_t(‘RED’,’GREEN’);

other_List   List_t;

BEGIN

other_List  :=  my_List;

other_List(2)  :=  ‘BLUE’;

END;

DECLARE

my_List   List_t;

BEGIN

SELECT color INTO my_List FROM color_models

WHERE model_type=’RGB’

. . .

END;

2.4.2. Присваивание значений элементам коллекции

my_List(4)  :=  ‘RED’;

other_List  :=  my_List;

2.4.3. Считывание значений элементов коллекции

IF (p_List.EXISTS(2)) then

DBMS_OUTPUT.PUT_LINE(‘p_List(2)=’|| p_List(2));

ENDIF;

2.4.4. Работа с коллекциями составных элементов

§  коллекции записей (Oracle 7.3.4 и выше) – при условии, что записи не содержат в качестве полей другие записи или коллекции