Oracle
 sql >> Database >  >> RDS >> Oracle

Metodo di raccolta:procedura DELETE nel database Oracle

Procedura di CANCELLAZIONE nel database Oracle

Come discusso nell'Introduzione ai metodi di raccolta, abbiamo sette funzioni di raccolta e 3 procedure di raccolta. Pertanto in totale abbiamo 10 metodi di raccolta tra i quali abbiamo già discusso 7 funzioni di raccolta finora. Quindi oggi in questo tutorial discuteremo la prima procedura di raccolta PL/SQL che è la procedura DELETE in Oracle Database.

Cos'è il metodo di raccolta PL/SQL Elimina?

Il metodo di raccolta DELETE è una procedura sovraccaricata che rimuove gli elementi dalla raccolta.

Cosa intendi per procedura sovraccarica?

Hai sentito bene. Il metodo di raccolta PL/SQL DELETE è una procedura di overload. Ciò significa che puoi utilizzare la stessa procedura in tre modi diversi . Questi tre modi diversi sono –

  • ELIMINA :Chiamata di procedura semplice senza alcun parametro. Pertanto, se la procedura di raccolta PL/SQL DELETE viene utilizzata senza alcun parametro, rimuoverà tutti gli elementi dalla raccolta .
  • CANCELLA (numero-indice ) :Chiamata di procedura con un solo parametro. Questo singolo parametro è il numero di indice valido della raccolta. La procedura di raccolta DELETE richiamata passando un numero di indice valido rimuove l'elemento dell'indice specifico .
  • CANCELLA (indice-iniziale, indice-finale ) : Chiamata di procedura con due parametri. Questo modo di chiamare una procedura DELETE è definito come Elimina intervallo . In questo modo devi specificare due Indici. E la procedura cancella l'intervallo di elementi che cadono tra indice-iniziale e-indice-finale .

Se la raccolta è un array associativo con indicizzazione di stringa, l'indice-iniziale e l'indice-finale sono string; altrimenti gli indici iniziali e finali sono numeri interi.

Possiamo utilizzare la procedura DELETE in Oracle Database con tutte le raccolte?

Sì, il metodo di raccolta DELETE può essere utilizzato per tutti e tre i tipi di raccolte. Questi sono:tabella nidificata, VARRAY e array associativi.

Aspetta! Ma se usiamo la procedura DELETE con VARRAY, non verrà creata una raccolta sparsa?

Poiché VARRAY non è una raccolta sparsa, quindi non possiamo eliminare singole righe da essa. Inoltre, l'unica chiamata di procedura che possiamo eseguire con VARRAY è la prima. Che è il metodo di raccolta DELETE senza alcun argomento che rimuove tutti gli elementi dalla raccolta. L'unico modo per rimuovere una singola riga da un VARRAY è tagliarla dalla sua estremità usando un'altra procedura chiamata TRIM.

Possiamo aspettarci qualche eccezione con il metodo di raccolta DELETE?

Sì, esiste un'eccezione associata al metodo di raccolta PL/SQL DELETE. Se la procedura DELETE viene applicata a una tabella nidificata non inizializzata e VARRAY, genera un'eccezione "Collection_is_Null".

Esempi di metodo di raccolta PL/SQL DELETE.

Vediamo alcuni esempi di ciascuna delle suddette procedure DELETE call.

Esempio 1:chiamata di procedura semplice senza argomento.

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;
/

La chiamata alla procedura di raccolta DELETE senza alcun argomento cancellerà tutti gli elementi della raccolta su cui è applicata. Allo stesso modo, nell'esempio sopra abbiamo una tabella annidata con il nome “my_nested_table” su cui abbiamo applicato la procedura DELETE. Pertanto, al termine dell'esecuzione, la chiamata della procedura cancellerà tutti i 10 elementi numerici che sono memorizzati in essa.

Lettura consigliata:come creare una tabella nidificata locale per il blocco PL/SQL.

Esempio 2:chiamata di procedura con un solo parametro

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;
/

Questo singolo parametro è il numero di indice valido della raccolta. Inoltre, la procedura di raccolta DELETE richiamata passando un numero di indice valido rimuoverà l'elemento dell'indice specifico. Quindi, nell'esempio precedente abbiamo specificato 5 come argomento del metodo di raccolta PL/SQL DELETE. Pertanto, dopo l'esecuzione corretta, la chiamata alla procedura rimuoverà l'elemento dalla raccolta che è memorizzato nell'indice 5.

Esempio 3:chiamata di procedura con due parametri.

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;
/

Questo modo di chiamare la procedura DELETE è definito come Elimina intervallo. Qui devi specificare due indici e la procedura cancella l'intervallo di elementi che cadono tra indice iniziale e indice finale. Nell'esempio precedente impostiamo l'indice iniziale come 2 e l'indice finale come 6. Ciò significa che durante l'esecuzione la chiamata della procedura DELETE rimuoverà tutti gli elementi che rientrano in questo intervallo.

Vai avanti e copia i codici sopra nel tuo sviluppatore SQL ed eseguili tu stesso per vedere quali sono gli output.

Puoi anche guardare il video tutorial sullo stesso argomento per la spiegazione dal vivo di tutti gli esempi precedenti.

Questo è il tutorial sul metodo di raccolta PL/SQL DELETE in Oracle Database. Spero ti sia piaciuto leggere e imparato qualcosa di nuovo. Assicurati di condividere questo blog sui tuoi social media. Unisciti anche a me sulla mia pagina Facebook per concetti più interessanti di PL/SQL.

Grazie e buona giornata!