В этом учебном материале вы узнаете, как использовать метод коллекций TRIM в Oracle PL/SQL с синтаксисом и примерами.
Описание
В Oracle PL/SQL метод TRIM удаляет все элементы из коллекции любого типа. Эта операция немедленно освобождает память, выделенную для удаляемых элементов.
Синтаксис
Синтаксис метода коллекций TRIM в Oracle PL/SQL.
collection_name.TRIM (n);
Параметры или аргументы
collection_name - имя коллекции.
TRIM - удаляет один элемент из конца коллекции, если коллекция имеет хотя бы один элемент.
TRIM (n) удаляет n элементов из конца коллекции, если в конце есть не менее n элементов.
Примечание
- Если в коллекции нет элементов вызывается предопределенное исключение SUBSCRIPT_BEYOND_COUNT.
- TRIM работает с внутренним размером коллекции. То есть, если DELETE удаляет элемент, но сохраняет его заполнитель, TRIM считает, что этот элемент существует. Поэтому TRIM может удалить удаленный элемент.
PL/SQL не удерживает заполнители для обрезанных элементов. Поэтому обрезанные элементы не входят во внутренний размер коллекции, и, вы не сможете восстановить обрезанный элемент, присвоив ему действительное значение. - TRIM работает с внутренним размером коллекции. То есть, если DELETE удаляет элемент, но сохраняет его заполнитель, TRIM считает, что этот элемент существует. Поэтому TRIM может удалить удаленный элемент.
PL/SQL не удерживает заполнители для обрезанных элементов. Поэтому обрезанные элементы не входят во внутренний размер коллекции, и, вы не сможете восстановить обрезанный элемент, присвоив ему действительное значение. - Не надейтесь на взаимодействия между TRIM и DELETE. Обрабатывайте Nested Tables, как массивы varray (и используйте только DELETE), либо стеки (и используйте только TRIM и EXTEND).
- Смотрите также методы коллекций: DELETE, EXTEND, EXISTS, FIRST и LAST, COUNT, LIMIT,PRIOR и NEXT.
Пример
Рассмотрим пример, чтобы понять как использовать метод коллекций TRIM в Oracle PL/SQL.
Пример TRIM с Nested Tables
Рассмотрим пример, в котором объявляем переменную Nested Tables,
инициализируем ее шестью элементами;
обрезаем последний элемент;
удаляем четвертый элемент;
а затем обрезаем последние два элемента, одним из которых является удаленный четвертый элемент.
Процедура print_nt печатает вложенную переменную таблицы после инициализации и после операций TRIM и 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 56 57 58 |
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, 44, 55, 66); BEGIN print_nt(nt); nt.TRIM; -- Обрежет последний элемент print_nt(nt); nt.DELETE(4); -- Удалит четвертый элемент print_nt(nt); nt.TRIM(2); -- Обрежет последние два элемента print_nt(nt); END; Результат: nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 44 nt.(5) = 55 nt.(6) = 66 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(4) = 44 nt.(5) = 55 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 nt.(5) = 55 --- nt.(1) = 11 nt.(2) = 22 nt.(3) = 33 --- |