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

Método de coleta:funções PRIOR e NEXT no banco de dados Oracle




Como vimos na Introdução aos Métodos de Coleta PL/SQL que existem 7 funções de coleta no Banco de Dados Oracle. Dentre essas sete funções já aprendemos os primeiros cinco métodos. Prior e Next são os dois últimos métodos/funções de coleta PL/SQL que ainda faltam explorar.

Assim, no blog PL/SQL de hoje, exploraremos em detalhes esses dois métodos de coleta intocados.

O que são as funções de coleta anterior e seguinte?


É sempre bom ter algumas funções na manga que podem ajudá-lo a navegar pelo conteúdo de sua coleção. A função Prior &Next pode ser essas funções.

Ambas as funções recebem um índice da coleção como entrada e retornam o resultado.

Por exemplo, o método de coleta PL/SQL PRIOR recebe um índice como entrada e retorna o valor armazenado no índice mais baixo anterior. Já o método de coleta NEXT retorna o valor do próximo índice mais alto.

São funções ou procedimentos de coleta anterior e seguinte?


Tanto Prior quanto Next são funções.

Podemos usar essas duas funções com todos os três tipos de coleções?


Sim, as funções de coleta Anterior e Próxima podem ser usadas com todos os três tipos de coleta.

Quando os métodos de coleta PL/SQL anterior e seguinte retornarão nulo?


O método de coleção Prior retorna nulo quando não há valores de subscritos inferiores disponíveis e o método de coleção Next retorna nulo quando não há valores de subscritos mais altos disponíveis para serem retornados.

Em palavras simples, podemos dizer que ambas essas funções de coleção retornam Null se forem usadas com os índices Primeiro e Último de uma coleção, respectivamente .

Qual ​​será a saída do método Collection Next e Prior se os usarmos com array associativo?


Se os métodos de coleta PRIOR e NEXT forem usados ​​com arrays associativos, eles retornarão uma saída do tipo de dados VARCHAR2 ou LONG.

Ouvi dizer que esses métodos geram algum tipo de exceção. É verdade?


Sim, é verdade. Se uma dessas funções for aplicada a uma tabela aninhada não inicializada ou a um Varray, elas gerarão a exceção COLLECTION_IS_NULL.

Você pode nos demonstrar como usar essas funções em nosso código?


Claro, por que não! Mostrarei a aplicação das funções de coleção Prior e Next com a ajuda de um código muito fácil.

Exemplo de método de coleta anterior.


Neste método vamos aprender a usar o método de coleta Prior com Tabela Aninhada.
SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

No bloco PL/SQL anônimo acima, temos duas instruções de saída com ‘Prior Function Call’. A primeira instrução de saída retornará o número de índice anterior ao número de índice 3 que possui algum valor armazenado nele. Em nosso caso, o índice anterior ao índice número 3 é 2. Assim, 2 será a saída da primeira instrução de saída.

Na segunda instrução de saída, chamamos a função Prior e a fornecemos como entrada para o objeto de coleção.
var_nt(var_nt.PRIOR(3)) 



O mecanismo Oracle executará a função Collection Prior primeiro (vamos chamá-la de parte 1) e, usando o resultado da parte 1, ele executará o objeto de coleção (vamos chamá-lo de parte 2) e produzirá o resultado final que será 18 no nosso caso. Vá em frente, copie o código e tente executar você mesmo.


O que acontecerá se excluirmos o Índice mais baixo anterior da tabela aninhada?


Então agora a questão é, o que acontecerá se você excluir o Índice Mais Baixo Anterior que é 2 em nosso código. Nesse caso, o resultado definitivamente não será o mesmo. A função anterior retorna o índice mais baixo anterior. Mas esse Índice deve conter algum valor.

Tente você mesmo. Aqui está o código.
DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        var_nt.DELETE(2);
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Exemplo de método de coleta em seguida.


Você pode usar o método PL/SQL Collection Next da mesma forma que usou a função Prior no código acima. O método de coleta NEXT retorna o valor do próximo índice mais alto. Aqui está o exemplo
DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); 
        dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); 
END;
/

Ambos os exemplos são quase os mesmos, exceto a chamada de função de coleção. Na seção de execução deste bloco PL/SQL, temos novamente duas instruções de saída. A primeira instrução de saída retornará o próximo número de índice não vazio, enquanto a segunda retornará os dados armazenados nesse índice. O funcionamento de ambas as declarações será o mesmo que discutimos acima. Vá em frente e copie o código e veja a saída.

Esse foi o tutorial detalhado sobre o método de coleta PL/SQL Next and Prior. Espero que tenha gostado da leitura e aprendido algo novo. Certifique-se de compartilhar este blog em suas mídias sociais. Para compartilhar este blog em seu Facebook clique aqui e para twitter clique aqui.

Obrigado e tenha um ótimo dia!