Процедура ИЗТРИВАНЕ в базата данни на Oracle
Както беше обсъдено във Въведение в методите за събиране, имаме седем функции за събиране и 3 процедури за събиране. Следователно общо имаме 10 метода за събиране, сред които вече обсъдихме 7 функции за събиране досега. Ето защо днес в този урок ще обсъдим първата процедура за събиране на PL/SQL, която е процедура DELETE в Oracle Database.
Какво е методът за събиране на PL/SQL Delete?
Методът за събиране DELETE е претоварена процедура, която премахва елементи от колекцията.
Какво имаш предвид под претоварена процедура?
Чухте го правилно. Методът за събиране на PL/SQL DELETE е претоварена процедура. Което означава, че можете да използвате една и съща процедура по три различни начина . Тези три различни начина са –
- ИЗТРИВАНЕ :Просто извикване на процедура без никакви параметри. По този начин, ако процедурата за PL/SQL Collection DELETE се използва без параметър, тогава тя ще премахне всички елементи от колекцията .
- ИЗТРИВАНЕ (индекс-номер ) :Извикване на процедура с един параметър. Този единствен параметър е валидният индекс на колекцията. Процедурата за събиране DELETE, извикана чрез подаване на валиден номер на индекс, ще премахне елемента от конкретния индекс .
- ИЗТРИВАНЕ (начален-индекс, краен-индекс ) : Извикване на процедура с два параметъра. Този начин за извикване на процедура DELETE се нарича Изтриване на диапазон . По този начин трябва да посочите два индекса. И процедурата изтрива диапазона от елементи, които попадат между начален индекс и краен индекс .
Ако колекцията е асоциативен масив с индексиран низ, началният индекс и крайният индекс са низови; в противен случай началният и крайният индекс са цели числа.
Можем ли да използваме процедурата DELETE в Oracle Database с всички колекции?
Да, методът за събиране DELETE може да се използва и за трите типа колекции. Това са – вложена таблица, VARRAY и асоциативни масиви.
Чакай! Но ако използваме процедурата DELETE с VARRAY, тогава няма ли тя да направи рядка колекция?
Тъй като VARRAY не е рядка колекция, следователно не можем да изтрием отделни редове от нея. Освен това, единственото извикване на процедура, което можем да изпълним с VARRAY, е първото. Което е методът за колекция DELETE без никакви аргументи, който премахва всички елементи от колекцията. Единственият начин за премахване на отделен ред от VARRAY е като го отрежете от края му с помощта на друго извикване на процедура TRIM.
Можем ли да очакваме някакво изключение с метода за събиране DELETE?
Да, има изключение, свързано с метода за събиране на PL/SQL DELETE. Ако процедурата DELETE се приложи към неинициализирана вложена таблица и VARRAY, тогава тя повдига изключение „Collection_is_Null“.
Примери за метод за събиране на PL/SQL DELETE.
Нека видим някои примери за всяко от гореспоменатите извиквания на процедура DELETE.
Пример 1:Просто извикване на процедура без аргумент.
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Range Delete var_nt.DELETE; FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
Извикването на процедура за събиране DELETE без никакъв аргумент ще изтрие всички елементи от колекцията, върху която е приложена. По същия начин в горния пример имаме вложена таблица с името “my_nested_table”, върху която приложихме процедурата DELETE. По този начин, при успешно изпълнение, извикването на процедурата ще изтрие всички 10 числови елемента, които се съхраняват в него.
Предложен четене:Как да създадете вложена таблица, локална към PL/SQL блок.
Пример 2:Извикване на процедура с един параметър
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN DBMS_OUTPUT.PUT_LINE('After Deleted'); --Delete Specific Index var_nt.DELETE(5); IF var_nt.EXISTS(5) THEN DBMS_OUTPUT.PUT_LINE('Value at Index [5] is '|| var_nt(5)); ELSE DBMS_OUTPUT.PUT_LINE('Data is Deleted'); END IF; END; /
Този единствен параметър е валидният индекс на колекцията. Освен това процедурата за събиране DELETE, извикана чрез подаване на валиден номер на индекс, ще премахне елемента от конкретния индекс. И така, в горния пример посочихме 5 като аргумент на метода за събиране на PL/SQL DELETE. По този начин, при успешно изпълнение извикването на процедурата ще премахне елемента от колекцията, която се съхранява в индекс 5.
Пример 3:Извикване на процедура с два параметъра.
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Delete Range var_nt.DELETE(2,6); FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
Този начин на извикване на процедура DELETE се нарича изтриване на диапазон. Тук трябва да посочите два индекса и процедурата изтрива диапазона от елементи, които попадат между начален индекс и краен индекс. В горния пример зададохме началния индекс на 2 и крайния на 6. Това означава, че при изпълнение извикването на процедурата DELETE ще премахне всички елементи, които попадат в този диапазон.
Продължете и копирайте горните кодове във вашия SQL Developer и ги изпълнете сами, за да видите какви са изходите.
Можете също да гледате видеоурока на същата тема за обяснение на живо за всички горни примери.
Това е урокът за метода за събиране на PL/SQL DELETE в Oracle Database. Надяваме се, че ви е харесало четенето и сте научили нещо ново. Не забравяйте да споделите този блог във вашите социални медии. Също така се присъединете към мен на моята Facebook страница за по-интересни концепции за PL/SQL.
Благодаря и приятен ден!