В этом учебном материале вы узнаете, как использовать метод коллекций EXTEND в Oracle PL/SQL с синтаксисом и примерами.
Описание
В Oracle PL/SQL метод EXTEND - это процедура, которая добавляет элементы в конец Varray или Nested Tables. Коллекция может быть empty (пустой), но не NULL.
Синтаксис
Синтаксис метода коллекций EXTEND в Oracle PL/SQL.
collection_name.EXTEND (n);
collection_name.EXTEND (n, i);
Параметры или аргументы
collection_name - имя коллекции.
EXTEND - добавляет один нулевой элемент в коллекцию.
EXTEND (n) - добавляет n нулевых элементов в коллекцию.
EXTEND (n, i) - добавляет n копий i-го элемента в коллекцию.
Примечание
- EXTEND (n, i) - единственная форма, которую вы можете использовать для коллекции, элементы которой имеют ограничение NOT NULL.
- EXTEND работает с внутренним размером коллекции. То есть, если DELETE удаляет элемент, но сохраняет его заполнитель, EXTEND считает, что этот элемент существует.
- Смотрите также методы коллекций: DELETE, TRIM, EXISTS, FIRST и LAST, COUNT, LIMIT, PRIOR и NEXT.
Пример
Рассмотрим пример, чтобы понять как использовать метод коллекций EXTEND в Oracle PL/SQL.
Пример EXTEND с Nested Tables
Рассмотрим пример, в котором объявляем переменную Nested Tables, инициализируя ее тремя элементами; добавляем две копии первого элемента;
удаляем пятый (последний) элемент; а затем добавляем один нулевой элемент.
Поскольку EXTEND считает, что удаленный пятый элемент существует, добавленный нулевой элемент является шестым элементом. Процедура print_nt печатает переменную Nested Tables после инициализации и после операций EXTEND и DELETE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
CREATE OR REPLACE TYPE nt_type IS TABLE OF NUMBER; CREATE OR REPLACE PROCEDURE print_nt (nt nt_type) IS i NUMBER; BEGIN i := nt.FIRST; IF i IS NULL THEN DBMS_OUTPUT.PUT_LINE('nt is empty'); ELSE WHILE i IS NOT NULL LOOP DBMS_OUTPUT.PUT('nt.(' || i || ') = '); print(nt(i)); i := nt.NEXT(i); END LOOP; END IF; DBMS_OUTPUT.PUT_LINE('---'); END print_nt; DECLARE nt nt_type := nt_type(11, 22, 33); BEGIN print_nt(nt); nt.EXTEND(2,1); -- Добавит две копии первого элемента print_nt(nt); nt.DELETE(5); -- Удалит пятый элемент print_nt(nt); nt.EXTEND; -- Добавит один нулевой элемент print_nt(nt); END; Результат: nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 11 nt.(5) = 11 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 11 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 11 nt.(6) = NULL --- |