Nous utilisons des cookies pour améliorer votre expérience. En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies.


Politique de confidentialité

Varray en oracle PL/SQL

Varray en oracle PL/SQL

En PL/SQL, nous avons une structure de données nommée varray qui est un tableau de taille variable qui peut être utilisé pour stocker une taille fixe d'éléments de données du même type, séquentiellement, où le nombre d'éléments peut varier de zéro (vide) au taille maximale déclarée.

Un varray stocke des données dans des emplacements de mémoire contigus où le premier élément est stocké à l'emplacement d'adresse le plus bas et le dernier élément est stocké à l'emplacement d'adresse le plus élevé.

Par exemple, dans la figure ci-dessous, nous avons un varray de taille 10 et 6 éléments de données y sont stockés.

Pendant ce cours, nous allons travailler avec ces deux tables :

Table - Employes                                      Table - Departement    
+----+---------+-----+----------+------------+------+  +--------+--------------+
| Id | Nom     | Age | Salaire  | Profession | Dep  |  | Id_dep | Nom_dep      |
+----+---------+-----+----------+------------+------+  +--------+--------------+
|  1 | Ismail  |  25 | 6000.00  | Assistant  |    2 |  |      1 | Informatique |
|  2 | Mohamed |  30 | 8000.40  | Directeur  |    1 |  |      2 | RH           |
|  3 | Fatima  |  29 | 6000.00  | Directeur  |    3 |  |      3 | Vente        |
|  4 | Dounia  |  30 | 7000.00  | Assistant  |    4 |  |      4 | Strategies   |
|  5 | Omar    |  30 | 10000.00 | Ingenieur  |    1 |  +--------+--------------+
|  7 | Mostafa |  33 | 7000.00  | Ingenieur  |    3 |
|  8 | Moneim  |  31 | 12000.00 | Ingenieur  |    4 |
+----+---------+-----+----------+------------+------+ 
                            

Pour accéder aux éléments stockés dans une variable de type varray, nous utilisons la syntaxe nom_variable(index) index(indice) commence à 1 pour le premier élément et va jusqu'à la limite supérieure actuelle des éléments qui signifie le nombre d'éléments qui existe à ce point donné ( pas la taille maximale du tableau). Pour l'exemple ci-dessus, l'index varie de 1 à 6.

La limite supérieure continue de changer à mesure que vous ajoutez ou supprimez des éléments d'un tableau, mais elle ne peut pas dépasser la taille maximale du tableau.

La base de données stocke une variable varray en tant qu'objet unique. Si une variable varray est inférieure à 4 Ko, elle réside dans la table dont elle est une colonne; sinon, il réside en dehors de la table mais dans le même espace.

Déclaration

Nous pouvons déclarer un nouveau type varray en utilisant l'instruction TYPE à l'intérieur du bloc PL/SQL.

Syntaxe
TYPE nom_type IS VARRAY(max_elem) of type_element [NOT NULL];

Avec :

  •  nom_type est le type du VARRAY.
  •  max_elem - Le nombre maximum d'éléments autorisés dans le VARRAY.
  •  type_element est le type d’éléments de la variable du type VARRAY
  •   NOT NULL spécifie que l'élément du VARRAY de ce type ne peut pas avoir d'éléments NULL. Notez qu'une variable VARRAY peut être nulle ou non initialisée.

Pour créer un type VARRAY qui est accessible globalement dans la base de données, pas seulement dans votre code PL/SQL, vous utilisez la syntaxe suivante:

Syntaxe
CREATE [OR REPLACE ] TYPE nom_type AS|IS VARRAY(max_elem) OF type_element [NOT NULL];
                            

Le paramètre AS/IS spécifie si le type sera permanent(AS) ou temporaire(IS).

  Exemple:
Type notes IS VARRAY(5) OF INTEGER;
Type decisions IS VARRAY(6) OF VARCHAR2(20);
                            

Pour initialiser une variable VARRAY à une collection vide (zéro élément), vous utilisez la syntaxe suivante

Syntaxe
varray_nom nom_type := nom_type();

Si vous souhaitez spécifier des éléments pour la variable VARRAY lors de son initialisation, vous pouvez utiliser cette syntaxe:

varray_nom nom_type := nom_type(element1, element2, ...);

Application 1

Vous pouvez initialiser les éléments varray à l'aide de la méthode constructeur du type varray, qui porte le même nom que varray. Un varray est automatiquement NULL lorsqu'il est déclaré et doit être initialisé avant que ses éléments puissent être référencés.

DECLARE
    Type tabnotes IS VARRAY(10) OF INTEGER;
    Type tabnoms IS VARRAY(10) OF VARCHAR2(20);

    n1 tabnotes; -- variable c1 de type notes;
    c1 tabnoms; -- variable c1 de type noms;
    total integer; 

BEGIN
    n1:= tabnotes(12,15,17,18);
    c1:= tabnoms('Sara', 'Ismail','Alex','Adam');
    total := c1.count; 
    dbms_output.put_line('au total '|| total || ' etudiants'); 
    FOR i in 1 .. total LOOP 
      dbms_output.put_line('Etudiant: ' || c1(i) || ' Note: ' || n1(i));  
   END LOOP; 
END;
                            

Lorsque le code ci-dessus est exécuté à l'invite SQL, il produit le résultat suivant :

au total 4 etudiants
Etudiant: Sara Note: 12
Etudiant: Ismail Note: 15
Etudiant: Alex Note: 17
Etudiant: Adam Note: 18
                                    

Application 2

Les éléments d'un varray peuvent également être un %ROWTYPE de n'importe quelle table de base de données ou %TYPE de n'importe quel champ de table de base de données. L'exemple suivant illustre ce concept.

DECLARE
    CURSOR emp_cur IS SELECT Nom FROM Employes;
    rec_emp emp_cur%ROWTYPE;
    Type tabnoms IS VARRAY(15) OF Employes.nom%TYPE;

    c1 tabnoms:= tabnoms(); -- variable c1 de type noms - liste vide;
    compteur integer :=0; 

BEGIN
    FOR rec_emp IN emp_cur LOOP
        compteur := compteur + 1; 
        c1.extend; --incrémenter la taille
        c1(compteur)  := rec_emp.Nom; -- Ajouter le nom dans l'indice courant
        dbms_output.put_line('Employe('||compteur ||'):'||c1(compteur)); 
    END LOOP; 
END;
                            

Lorsque le code ci-dessus est exécuté à l'invite SQL, il produit le résultat suivant :

Employe(1):Ismail
Employe(2):Mohamed
Employe(3):Fatima
Employe(4):Dounia
Employe(5):Omar
Employe(6):Mostafa
Employe(7):Moneim
                                    

Partager ce cours avec tes amis :

Rédigé par ESSADDOUKI Mostafa

The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.

Commentaire(s)