Добре дошли обратно в последния урок от серията PL/SQL Collection. Най-дългата поредица от видео уроци досега в канала. В този урок ще научим за последната процедура за събиране на PL/SQL, която е процедура TRIM в Oracle Database.
Какво е PL/SQL Collection Method TRIM?
Методът за събиране TRIM в Oracle db е претоварена процедура, с помощта на която можете да премахнете един или повече елементи от края на колекция.
По колко начина можем да извикаме процедурата TRIM на метода за събиране в Oracle Database?
Тъй като методът за събиране на PL/SQL TRIM е претоварена процедура, така че можем да го извикаме по два различни начина. Тези две различни извиквания на процедурата TRIM са:
- ОТРИВАНЕ:Процедура за отрязване без параметър.
Ако използваме процедура TRIM без никакви параметри, тя ще премахне само един елемент от края на колекцията.
- ОТРИМАНЕ:Процедура за отрязване с един параметър.
Процедурата TRIM, извикана чрез подаване на един аргумент, ще премахне броя на елементите от края на колекцията, както е посочено от параметъра. Този параметър трябва да е валидно цяло число. Също така не трябва да е по-голям от максималния брой елементи, които има вашата колекция.
Информация:Процедурата за отрязване ще предизвика грешка, ако има опит за отрязване на пространство под нула елементи.
Можем ли да използваме PL/SQL метода за събиране TRIM и с трите типа колекции?
За съжаление не, не можем. Подобно на процедурата за събиране на PL/SQL EXTEND, процедурата TRIM може да се използва само с колекция вложени таблици и VARRAY. Не можем обаче да го използваме с асоциативни масиви.
Какво ще се случи, ако използваме PL/SQL колекция процедура TRIM с асоциативен масив?
Ако методът за събиране Trim на версиите на Oracle Database се използва с асоциативен масив, тогава ще получите грешка при компилиране .
Каква е спецификацията на процедурата за изрязване в Oracle Database?
Спецификацията на процедурата за събиране TRIM е:
PROCEDURE TRIM (n PLS_INTEGER:= 1);
Ако n е NULL, тогава отрязването няма да направи нищо.
Чух те да казваш в видеото, че също можем да получим SUBSCRIPT_BEYOND_COUNT изключение?
Да, методът за събиране на PL/SQL TRIM ще предизвика SUBSCRIPT_BEYOND_COUNT изключение. Ако има опит за изрязване на повече елементи, отколкото реално съществуват в колекцията.
Можете да намерите примера за това изключение, което демонстрирах във видеото по-късно в този блог. Ако искате да гледате видеото, ето го. Ако не, не се колебайте да превъртите надолу.
Има ли други изключения, свързани с PL/SQL Collection метода Trim, за които трябва да знаем?
Да, има още едно изключение, свързано с процедурата TRIM и това е COLLECTION_IS_NULL изключение.
Всеки път, когато приложите процедура за събиране TRIM към неинициализирана вложена таблица или VARRAY, компилаторът ще повдигне изключение COLLECTION_IS_NULL.
Можем ли да използваме процедурата TRIM и DELETE заедно?
Не, не можем да използваме колекциите процедури TRIM и DELETE заедно. Използването им един с друг ще доведе до неочаквани резултати.
Помислете за сценарий, когато сте ИЗТРИЛИ елемент, разположен в края на променлива VARRAY и след това приложите процедура TRIM върху същата. Можете ли да познаете броя на елементите, които може да сте премахнали? Може да се объркате да повярвате, че два елемента са премахнати, но фактът е, че само един е премахнат. TRIM действа върху заместващия елемент, оставен от процедура DELETE.
За да се избегнат тези объркващи и обезпокоителни резултати, поддръжката на базата данни на Oracle силно препоръчва тези две процедури да се използват изключително за дадена колекция.
Ами примерите? Правим ли ги в този блог или не?
Разбира се, определено ще направим примерите в този блог. Всъщност щях да ви покажа демонстрацията на всяко извикване на процедурата TRIM на PL/SQL Collection, което споменахме по-горе. Отиваме:
1. Процедура за събиране на PL/SQL TRIM без параметър.
SET SERVEROUTPUT ON; DECLARE TYPE my_nestedTable IS TABLE OF number; nt_obj my_nestedTable := my_nestedTable(1,2,3,4,5); BEGIN nt_obj.TRIM; DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..nt_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (nt_obj (i)); END LOOP; END; /
2. Процедура за събиране TRIM с параметър.
SET SERVEROUTPUT ON; DECLARE TYPE my_nestedTable IS TABLE OF number; nt_obj my_nestedTable := my_nestedTable(1,2,3,4,5); BEGIN nt_obj.TRIM (3); DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..nt_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (nt_obj(i)); END LOOP; END; /
3. Процедура за събиране на PL/SQL TRIM SUBSCRIPT_BEYOND_COUNT изключение.
SET SERVEROUTPUT ON; DECLARE TYPE my_nestedTable IS TABLE OF number; nt_obj my_nestedTable := my_nestedTable(1,2,3,4,5); BEGIN nt_obj.TRIM(6); DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..nt_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (nt_obj(i)); END LOOP; END; /
SUBSCRIPT_BEYOND_COUNT изключение възниква, когато предадем аргумент, по-голям от общия брой елементи на колекцията. В горния пример колекцията, която използваме, е вложена таблица с името „my_nestedTable“, която има 5 цифрови елемента, съхранени в нея. Въпреки това в извикването на процедурата ние инструктирахме компилатора да TRIM 6 елемента, което определено е невъзможно, така че в този случай компилаторът повдига SUBSCRIPT_BEYOND_COUNT изключение.
4. Процедура за събиране TRIM с VARRAY.
SET SERVEROUTPUT ON; DECLARE TYPE inBlock_vry IS VARRAY (5) OF NUMBER; vry_obj inBlock_vry := inBlock_vry(1, 2, 3, 4, 5); BEGIN --TRIM without parameter vry_obj.TRIM; DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..vry_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (vry_obj(i)); END LOOP; --TRIM with Parameter vry_obj.TRIM (2); DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..vry_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (vry_obj(i)); END LOOP; END; /
Това е урокът, който обяснява концепциите за процедурата TRIM на метода за събиране на PL/SQL в Oracle Database.
Надявам се да ви е харесало. Свържете се с мен на моята Facebook страница за повече актуализации и прозрения относно концепциите на Oracle Database. Благодаря и приятен ден!