Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Método de coleta:procedimento DELETE no banco de dados Oracle

Procedimento DELETE no banco de dados Oracle


Conforme discutido na Introdução aos métodos de coleta, temos sete funções de coleta e 3 procedimentos de coleta. Portanto, no total, temos 10 métodos de coleta entre os quais já discutimos 7 funções de coleta até agora. Assim, hoje neste tutorial vamos discutir o primeiro procedimento de coleta PL/SQL que é o procedimento DELETE no Banco de Dados Oracle.

O que é o método de coleta PL/SQL Excluir?


O método de coleção DELETE é um procedimento sobrecarregado que remove elementos da coleção.

O que você quer dizer com um procedimento sobrecarregado?


Você ouviu direito. O método de coleta PL/SQL DELETE é um procedimento sobrecarregado. O que significa que você pode usar o mesmo procedimento de três maneiras diferentes . Essas três maneiras diferentes são –
  • EXCLUIR :Chamada de procedimento simples sem nenhum parâmetro. Assim, se o procedimento de coleção PL/SQL DELETE for usado sem nenhum parâmetro, ele removerá todos os elementos da coleção .
  • EXCLUIR (número-índice ) :Chamada de procedimento com um único parâmetro. Este parâmetro único é o número de índice válido da coleção. O procedimento de coleta DELETE chamado passando um número de índice válido removerá o elemento do índice específico .
  • EXCLUIR (índice inicial, índice final ) : Chamada de procedimento com dois parâmetros. Essa forma de chamar um procedimento DELETE é chamada de exclusão de intervalo . Desta forma, você deve especificar dois índices. E o procedimento exclui o intervalo de elementos que estão entre o índice inicial e o índice final .

Se a coleção for um array associativo indexado por string, o índice inicial e o índice final são string; caso contrário, os índices iniciais e finais são inteiros.

Podemos usar o procedimento DELETE no banco de dados Oracle com todas as coleções?


Sim, o método de coleta DELETE pode ser usado para todos os três tipos de coletas. Estes são – tabela aninhada, VARRAYs e arrays associativos.

Espere! Mas se usarmos o procedimento DELETE com VARRAYs, ele não fará uma coleção esparsa?


Como VARRAY não é uma coleção esparsa, portanto, não podemos excluir linhas individuais dela. Além disso, a única chamada de procedimento que podemos executar com VARRAY é a primeira. Que é o método de coleção DELETE sem nenhum argumento que remove todos os elementos da coleção. A única maneira de remover uma linha individual de um VARRAY é aparando-a de seu final usando outra chamada de procedimento TRIM.

Podemos esperar alguma exceção com o método de coleta DELETE?


Sim, há uma exceção associada ao método de coleta PL/SQL DELETE. Se o procedimento DELETE for aplicado a uma tabela aninhada não inicializada e VARRAY, ele gerará uma exceção “Collection_is_Null”.

Exemplos do método de coleta PL/SQL DELETE.


Vamos ver alguns exemplos de cada uma das chamadas Procedure DELETE mencionadas acima.

Exemplo 1:chamada de procedimento simples sem argumento.

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

Chamar o procedimento de coleção DELETE sem nenhum argumento excluirá todos os elementos da coleção sobre os quais ele é aplicado. Da mesma forma, no exemplo acima temos uma tabela aninhada com o nome “my_nested_table” sobre a qual aplicamos o procedimento DELETE. Assim, na execução bem-sucedida, a chamada do procedimento excluirá todos os 10 elementos numéricos que estão armazenados nele.

Leitura sugerida:Como criar uma tabela aninhada local para o bloco PL/SQL.

Exemplo 2:chamada de procedimento com um único parâmetro

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

Este parâmetro único é o número de índice válido da coleção. Além disso, o procedimento de coleta DELETE chamado passando um número de índice válido removerá o elemento do índice específico. Portanto, no exemplo acima, especificamos 5 como o argumento para o método de coleta PL/SQL DELETE. Assim, na execução bem-sucedida, a chamada do procedimento removerá o elemento da coleção que está armazenado no índice 5.

Exemplo 3:chamada de procedimento com dois parâmetros.

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

Essa maneira de chamar o procedimento DELETE é chamada de Range delete. Aqui você tem que especificar dois índices e o procedimento exclui o intervalo de elementos que estão entre o índice inicial e o índice final. No exemplo acima, definimos o índice inicial como 2 e o índice final como 6. Isso significa que na execução a chamada de procedimento DELETE removerá todos os elementos que se enquadram nesse intervalo.

Vá em frente e copie os códigos acima em seu SQL Developer e execute-os você mesmo para ver quais são as saídas.

Você também pode assistir ao tutorial em vídeo sobre o mesmo tópico para explicação ao vivo de todos os exemplos acima.



Esse é o tutorial sobre o método de coleta PL/SQL DELETE no Oracle Database. Espero que tenha gostado da leitura e aprendido algo novo. Não deixe de compartilhar este blog em suas redes sociais. Junte-se também a mim na minha página do Facebook para conceitos mais interessantes de PL/SQL.

Obrigado e tenha um ótimo dia!