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

Instrução FORALL com cláusula VALUES-OF no banco de dados Oracle


Até agora, aprendemos como usar a instrução FORALL com uma coleção densa usando a cláusula de limite inferior e superior e uma coleção esparsa usando a cláusula INDICE OF. E se quisermos usar a instrução FORALL apenas com elementos selecionados da coleção? Podemos fazer isso? Sim, podemos fazer isso facilmente usando a instrução FORALL com a terceira e última cláusula vinculada que é 'VALUES-OF'.

O que é uma cláusula vinculada "Valores de"?


A instrução FORALL trata de vincular os elementos da coleção a uma única instrução DML de maneira otimizada. Usando a cláusula vinculada 'Values-of' da instrução FORALL, podemos vincular os elementos selecionados da coleção com a instrução DML.

Qual ​​é a sintaxe da cláusula vinculada "Values-of"?


Antes de entender como os valores da cláusula bound funcionam, vamos dar uma olhada em sua sintaxe e aprender qual é a maneira sintaticamente correta de usar a cláusula ‘Values-of’ com a instrução FORALL no Oracle Database.
FORALL idx IN VALUES OF indexing-collection
[Save exception]
DML/MERGE statement;

Informações:
Lembre-se sempre que o nome da cláusula é VALUES-OF e não VALUE-OF. Escrever VALUE-OF causará um erro que pode encerrar seu programa.
VALORES DE DIREITO
VALOR DE errado

Como funciona a cláusula Values-of bound?


A cláusula Values-of-bound exigirá duas coleções. A primeira coleção será a "Coleção de origem" . Faremos operações DML como inserir, excluir e atualizar os dados desta coleção usando a instrução FORALL.

A segunda coleção será a "Coleção de indexação ' que especificará o número de índice de elementos selecionados da primeira coleção. Esses elementos selecionados serão os elementos sobre os quais você deseja realizar as operações DML.

A cláusula Values-of-bound especifica que o valor da variável Loop Index (‘idx’ na sintaxe acima) da instrução FORALL é baseado nos valores do elemento na outra coleção. Portanto, referimos essa outra coleção como coleção de indexação na sintaxe acima.

Então, o que é essa coleção de indexação?


A coleção de indexação é um grupo de índices que a instrução FORALL pode percorrer. Esta coleção pode ser uma coleção densa, bem como uma coleção esparsa. Além disso, os números de índice armazenados na coleção não precisam ser exclusivos e podem ser listados em uma ordem arbitrária.

Existem restrições com a cláusula Values-of que devemos conhecer?


Sim, existem algumas coisas que você deve saber antes de trabalhar com a cláusula de valores de limite no Oracle Database. Essas restrições são –
  • A coleção de indexação deve ser uma NESTED TABLE ou uma ASSOCIATIVE ARRAY.
  • Se a coleção de indexação for uma matriz associativa, ela deverá ser indexada por PLS_INTEGER ou BINARY_INTEGER.
  • Os elementos da coleção de indexação devem ser PLS_INTEGER ou BINARY_INTEGER.

Exemplo de cláusula de valores de limite com instrução FORALL no banco de dados Oracle:

Etapa 1:criar tabela

CREATE TABLE tut_79 (
    selected_data     NUMBER(5)
);

Etapa 2:Escreva um bloco PL/SQL demonstrando como usar a cláusula Values-of com a instrução FORALL no banco de dados Oracle.

SET SERVEROUTPUT ON;
DECLARE
    --Source collection
    TYPE My_NestedTable IS TABLE OF NUMBER;
    source_col My_NestedTable := My_NestedTable (9,18,27,36,45,54,63,72,81,90);
    
    --Indexing collection
    TYPE My_Array IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
    index_col My_Array;
BEGIN
    --Initializing indexing collection with the index numbers.
    index_col   (1) :=  3;
    index_col   (5) :=  7;
    index_col   (12):=  8;
    index_col   (28):=  10;
    --FORALL statement 
    FORALL idx IN VALUES OF index_col
        INSERT INTO tut_79 VALUES (source_col (idx));
END;
/

Você pode assistir a explicação detalhada deste código no tutorial em vídeo. Lá eu expliquei cada linha deste bloco PL/SQL em detalhes.



Esse é o tutorial de como usar a cláusula Values-of bound com a instrução FORALL no Oracle Database. Espero que você ache útil. Por favor, compartilhe este blog com seus amigos em suas redes sociais. Inscreva-se também no meu canal do YouTube para tutoriais mais informativos e interessantes.

Obrigado e tenha um ótimo dia.