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:
- 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.
- 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!