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.