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

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


Bem-vindo de volta ao último tutorial da série PL/SQL Collection. A mais longa série de tutoriais em vídeo até agora no canal. Neste tutorial vamos aprender sobre o último procedimento PL/SQL Collection que é o procedimento TRIM no Banco de Dados Oracle.

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


Método de Coleta TRIM no Oracle db é um procedimento sobrecarregado com o qual você pode remover um ou mais elementos do final de uma coleção.

De quantas maneiras podemos chamar o procedimento TRIM do método de coleta no Oracle Database?


Como o método de coleta PL/SQL TRIM é um procedimento sobrecarregado, podemos chamá-lo de duas maneiras diferentes. Essas duas chamadas diferentes do procedimento TRIM são:
  1. TRIM:procedimento de corte sem parâmetro.

Se usarmos o procedimento TRIM sem nenhum parâmetro, ele removerá apenas um elemento do final da coleção.
  1. TRIM:procedimento de corte com um parâmetro.

O procedimento TRIM chamado passando um argumento removerá o número de elementos do final da coleção conforme especificado pelo parâmetro. Esse parâmetro deve ser um número inteiro válido. Também não deve ser maior que o número máximo de elementos que sua coleção possui.

Informação:O procedimento de apara gerará um erro se houver uma tentativa de aparar o espaço abaixo de zero elementos.

Podemos usar o método de coleta PL/SQL TRIM com todos os três tipos de coletas?


Infelizmente não, não podemos. Semelhante ao procedimento de coleção PL/SQL EXTEND, o procedimento TRIM só pode ser usado com a coleção de tabelas aninhadas e VARRAYs. No entanto, não podemos usá-lo com Associative Arrays.

O que acontecerá se usarmos o procedimento de coleta PL/SQL TRIM com um array associativo?


Se o método de coleta Trim das versões do Oracle Database for usado com um Associative Array, você receberá um erro de tempo de compilação .

Qual ​​é a especificação do Trim Procedure no Oracle Database?


A especificação do procedimento de cobrança TRIM é:
PROCEDURE TRIM (n PLS_INTEGER:= 1);

Se n for NULL, trim não fará nada.

Ouvi você dizendo em o vídeo que também podemos obter a exceção SUBSCRIPT_BEYOND_COUNT?


Sim, o método de coleta PL/SQL TRIM gerará a exceção SUBSCRIPT_BEYOND_COUNT. Se houver uma tentativa de aparar mais elementos do que realmente existe na coleção.

Você pode encontrar o exemplo dessa exceção que demonstrei no vídeo mais adiante neste blog. Se quiser ver o vídeo, aqui está. Se não, sinta-se à vontade para rolar para baixo.


Existem outras exceções associadas ao método de Coleta PL/SQL Trim que devemos conhecer?


Sim, há mais uma exceção associada ao procedimento TRIM e essa é a exceção COLLECTION_IS_NULL.

Sempre que você aplicar o procedimento de coleção TRIM a uma tabela aninhada não inicializada ou VARRAY, o compilador gerará a exceção COLLECTION_IS_NULL.

Podemos usar o procedimento TRIM e DELETE juntos?


Não, não podemos usar as coleções TRIM e DELETE juntas. Usá-los uns com os outros produzirá resultados inesperados.

Pense em um cenário em que você DELETE um elemento situado no final de uma variável VARRAY e depois aplique o procedimento TRIM no mesmo. Você consegue adivinhar o número de elementos que você pode ter removido? Você pode estar confuso ao acreditar que dois elementos foram removidos, mas o fato é que apenas um foi removido. TRIM atua sobre o espaço reservado deixado pelo procedimento DELETE.

Para evitar esses resultados confusos e enervantes, o suporte do banco de dados Oracle recomenda que esses dois procedimentos sejam usados ​​exclusivamente em uma determinada coleção.

E os exemplos? Estamos fazendo isso neste blog ou não?


Claro, definitivamente faremos os exemplos neste blog. Na verdade, eu estava prestes a mostrar a demonstração de cada uma das chamadas TRIM do procedimento PL/SQL Collection que mencionamos acima. Aqui vamos nós:

1. Procedimento de coleta PL/SQL TRIM sem parâmetro.

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. Procedimento de coleta TRIM com parâmetro.

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. Procedimento de coleta PL/SQL TRIM SUBSCRIPT_BEYOND_COUNT exceção.

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

A exceção SUBSCRIPT_BEYOND_COUNT ocorre quando passamos um argumento maior que o número total de elementos da coleção. No exemplo acima, a coleção que usamos é uma tabela aninhada com o nome 'my_nestedTable' que possui 5 elementos numéricos armazenados nela. No entanto, na chamada do procedimento, instruímos o compilador a TRIM 6 elementos, o que é definitivamente impossível, portanto, neste caso, o compilador gera a exceção SUBSCRIPT_BEYOND_COUNT.

4. Procedimento de coleta TRIM com 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;
/

Esse é o tutorial explicando os conceitos do procedimento TRIM do Método de Coleta PL/SQL no Banco de Dados Oracle.

Espero que tenha gostado. Conecte-se comigo na minha página do Facebook para mais atualizações e insights sobre os conceitos do Oracle Database. Obrigado e tenha um ótimo dia!