Oracle
 sql >> Base de données >  >> RDS >> Oracle

Instruction FORALL avec la clause liée VALUES-OF dans la base de données Oracle

Jusqu'à présent, nous avons appris à utiliser l'instruction FORALL avec une collection dense à l'aide de la clause de limite inférieure et supérieure et une collection clairsemée à l'aide de la clause liée INDICES OF. Que se passe-t-il si nous voulons utiliser l'instruction FORALL uniquement avec des éléments sélectionnés de la collection ? pouvons-nous faire cela? Oui, nous pouvons facilement le faire en utilisant l'instruction FORALL avec la troisième et dernière clause liée qui est 'VALUES-OF'.

Qu'est-ce qu'une clause liée "Valeurs de" ?

L'instruction FORALL consiste à lier les éléments de la collection avec une seule instruction DML de manière optimisée. En utilisant la clause liée "Values-of" de l'instruction FORALL, nous pouvons lier les éléments sélectionnés de la collection avec l'instruction DML.

Quelle est la syntaxe de la clause liée "Valeurs de" ?

Avant de comprendre comment fonctionnent les valeurs de la clause liée, examinons sa syntaxe et apprenons quelle est la manière syntaxiquement correcte d'utiliser la clause "Valeurs-de" avec l'instruction FORALL dans la base de données Oracle.

FORALL idx IN VALUES OF indexing-collection
[Save exception]
DML/MERGE statement;

Information :
N'oubliez jamais que le nom de la clause est VALUES-OF et non VALUE-OF. L'écriture de VALUE-OF provoquera une erreur qui pourrait terminer votre programme.
VALEURS DU droit
VALEUR DE tort

Comment fonctionne la clause liée Values-of ?

Les valeurs de la clause liée nécessiteront deux collections. La première collection sera la "Collection Source" . Nous effectuerons des opérations DML telles que l'insertion, la suppression et la mise à jour des données de cette collection à l'aide de l'instruction FORALL.

La deuxième collection sera la "Collection d'indexation ’ qui précisera le numéro d'index des éléments sélectionnés de la première collection. Ces éléments sélectionnés seront les éléments sur lesquels vous souhaitez effectuer les opérations DML.

La clause liée As Values-of spécifie que la valeur de la variable Loop Index ("idx" dans la syntaxe ci-dessus) de l'instruction FORALL est basée sur les valeurs de l'élément dans l'autre collection. Par conséquent, nous avons appelé cette autre collection Indexing-collection dans la syntaxe ci-dessus.

Qu'est-ce donc que cette collection d'indexation ?

La collection d'indexation est un groupe d'index que l'instruction FORALL peut parcourir en boucle. Cette collection peut être aussi bien une collection dense qu'une collection clairsemée. De plus, les numéros d'index stockés dans la collection n'ont pas besoin d'être uniques et peuvent être répertoriés dans un ordre arbitraire.

Existe-t-il des restrictions avec la clause Values-of que nous devrions connaître ?

Oui, il y a quelques choses que vous devez savoir avant de travailler avec les valeurs de la clause liée dans Oracle Database. Ces restrictions sont -

  • La collection d'indexation doit être un NESTED TABLE ou un ASSOCIATIVE ARRAY.
  • Si la collection d'indexation est un tableau associatif, elle doit être indexée par PLS_INTEGER ou BINARY_INTEGER.
  • Les éléments de la collection d'indexation doivent être de PLS_INTEGER ou BINARY_INTEGER.

Exemple de clause liée Values-of avec l'instruction FORALL dans la base de données Oracle :

Étape 1 :Créer un tableau

CREATE TABLE tut_79 (
    selected_data     NUMBER(5)
);

Étape 2 :Écrivez un bloc PL/SQL illustrant comment utiliser la clause Values-of avec l'instruction FORALL dans Oracle Database.

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

Vous pouvez regarder l'explication détaillée de ce code dans le didacticiel vidéo. Là, j'ai expliqué en détail chaque ligne de ce bloc PL/SQL.

C'est le didacticiel sur l'utilisation de la clause liée Values-of avec l'instruction FORALL dans Oracle Database. J'espère que vous le trouverez utile. Merci de partager ce blog avec vos amis sur leurs réseaux sociaux. Abonnez-vous également à ma chaîne YouTube pour des tutoriels plus informatifs et intéressants.

Merci et bonne journée.