Oracle
 sql >> база данни >  >> RDS >> Oracle

Метод за събиране:Процедура DELETE в базата данни на Oracle

Процедура ИЗТРИВАНЕ в базата данни на 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.

Благодаря и приятен ден!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. opatch предвар

  2. вграждане на изображение в html имейл

  3. как да изберете дори записи от таблица в oracle?

  4. Perl DBI - стартирайте SQL скрипт с множество изрази

  5. как да конкатенира низове?