pl sql collections nested table
Apprenez les bases des collections PL SQL, des méthodes de collection, des Varray, des tables imbriquées et des tableaux associatifs à l'aide d'exemples de code:
Dans le Sous-programmes PL / SQL tutoriel du Série PL / SQL , nous avons appris les procédures et les fonctions, les différentes méthodes de passage de paramètres et comment créer / supprimer des procédures et des fonctions dans PL / SQL.
Dans cet article, nous aborderons les collections PL SQL et les concepts associés. Nous expliquerons également le concept de Varrays, de tables imbriquées et de tables d'indexation disponibles en PL / SQL.
En outre, nous explorerons certaines des exceptions et méthodes de collecte intégrées.
Ce que vous apprendrez:
- Collections PL SQL
- Tables imbriquées dans PL / SQL
- Tableau associatif ou tables indexées
- Varrays en PL / SQL
- Conclusion
Collections PL SQL
Une collection est un groupe d'éléments de types de données homogènes. Il comprend généralement des tableaux, des listes, des ensembles, etc. Chacun des éléments a un indice particulier qui reflète sa position.
Les collections PL SQL sont des types suivants:
- Tableaux associatifs / Index-by
- Tables imbriquées.
- Varrays.
Les collections PL SQL sont généralement utilisées pour le stockage et la manipulation de gros morceaux de données, à l'aide du mot-clé BULK COLLECT dans Oracle.
Méthodes de collecte
Pl / SQL a quelques méthodes intégrées sous collection qui sont listées ci-dessous.
Sl. Non. | Nom | Descriptions |
---|---|---|
7 | suivant (m) | Donne l'index qui succède au mth index. |
1 | compter | Donne le nombre d'éléments présents dans la collection. |
deux | limite | Vérifie la taille de la collection. |
3 | existe (m) | Renvoie true si le mème élément présent dans la collection, sinon renvoie false. |
4 | première | Donne le numéro d'index de début dans la collection avec un indice entier. |
5 | dernier | Donne le numéro d'index de fin dans la collection avec un indice entier. |
6 | étendre | Ajoute un élément NULL à la fin de la collection. |
8 | avant (m) | Donne l'indice qui précède l'indice m. |
9 | garniture | Supprime un élément de la fin de la collection. |
dix | garniture (m) | Supprime m éléments de la fin de la collection. |
Onze | effacer | Supprime tous les éléments de la collection, en définissant le nombre sur 0. |
12 | supprimer (m) | Supprime le mth élément de la collection, si le mth element est NULL, aucune action n'est effectuée. |
13 | supprimer (m, k) | Supprime l'élément de la mth à la kième position. |
14 | étendre (m) | Ajoute un élément m à la fin de la collection. |
quinze | étendre (m, k) | Ajoute m copies du kème élément à la fin de la collection. |
Exceptions de collection
Certaines des exceptions de collecte courantes sont les suivantes:
- VALUE_ERROR: Cette exception est levée si un indice ne peut pas être converti en type de clé ou est NULL. Cette exception est normalement déclenchée si une clé est de type PLS_INTEGER range et que l'indice réside au-delà de cette plage.
- AUCUNE DONNÉE DISPONIBLE: Cette exception est levée par PL / SQL si une instruction SELECT ne récupère aucune ligne ou si un programme pointe vers un élément qui est supprimé dans une table imbriquée. Cette exception peut également être déclenchée par un élément qui n'est pas initialisé dans une table d'indexation.
- COLLECTION_IS_NULL: Cette exception est levée par PL / SQL si la collection est NULL par défaut.
- SUBSCRIPT_BEYOND_COUNT: Cette exception est levée lorsqu'un indice est supérieur au nombre total du nombre d'éléments de la collection.
- SUBSCRIPT_OUTSIDE_LIMIT: Cette exception est levée lorsqu'un indice est au-delà de la plage de seuil.
Tables imbriquées dans PL / SQL
Les tables imbriquées sont comme une table de base de données à une seule colonne ou un tableau à 1 dimension où la taille du tableau est dynamique. Son indice est de type numérique. Nous pouvons obtenir la table imbriquée dans une variable en donnant aux lignes un indice qui commence par 1. Cette fonctionnalité la rend similaire par nature comme un tableau.
Une table imbriquée peut être conservée dans une colonne d'une base de données. Il peut également être utilisé pour manipuler des opérations SQL en joignant des tables. Comme il s'agit d'un tableau dynamique, la limite supérieure peut être de n'importe quelle taille.
Une table imbriquée peut avoir à la fois des caractéristiques de collection denses et clairsemées, ce qui signifie que tout élément peut être supprimé de manière aléatoire (ce qui le rend clairsemé) à l'aide de la procédure DELETE. La suppression des données provoque une discontinuité dans l'index mais la fonction NEXT permet d'itérer vers les indices suivants. Puisque les données sont stockées sous la forme d'une table, elles peuvent être récupérées à l'aide d'instructions SELECT.
Une table imbriquée peut être construite au niveau du schéma ou dans un bloc PL / SQL. C'est comme un objet de base de données accessible dans la base de données ou le sous-programme.
Les différences entre la matrice et la table imbriquée sont répertoriées ci-dessous:
- La taille des tables imbriquées peut être augmentée de manière dynamique. La limite supérieure d'un tableau est fixe mais elle ne l'est pas pour les tables imbriquées.
- Le tableau a des indices consécutifs, ce qui le rend dense. Cependant, une table imbriquée est dense au moment de la création, mais devient clairsemée une fois que les éléments sont supprimés entre les deux.
Syntaxe de la table imbriquée:
TYPE <> IS TABLE OF <> (NOT NULL);
Ici, 'taper' est le spécificateur de type. 'élément' est le type de données.
Implémentation du code avec la table imbriquée:
DECLARE TYPE subject IS TABLE OF VARCHAR(15); TYPE teacher IS TABLE OF VARCHAR2(20); subjectnames subject; subjectteacher teacher; summ integer; BEGIN -- adding subject and its teachers to the table subjectnames := subject('PLSQL', 'SELENIUM', 'JMETER'); subjectteacher:= teacher('Sashi', 'Mala', 'Mukund'); -- returns count of number of elements in nested table summ:= subjectteacher.count; -- printing the content to the console dbms_output.put_line('Total Number of Teachers: '|| summ); FOR i IN 1 .. summ LOOP dbms_output.put_line('Subject:'||subjectnames(i)||', Teacher:' || subjectteacher(i)); end loop; END;
La sortie du code ci-dessus doit être:
Tableau associatif ou tables indexées
La table indexée est communément appelée tableau associatif. En termes de structure, la table indexée et les tables imbriquées sont similaires et ont un indice pour accéder aux éléments.
Un tableau associatif est représenté par une paire clé-valeur. Chacune des clés uniques est utilisée pour identifier la valeur dans le tableau. Le type de données de la clé peut être une chaîne ou un entier défini lors de sa création. Une clé est ajoutée à la table d'indexation en attribuant simplement une valeur pour la première fois. Pour modifier la même entrée, nous devons utiliser la même clé.
La clé doit être unique en tant que clé primaire dans une table ou en combinant des chaînes pour développer une valeur unique. Ce type de collection a une taille de tableau qui est dynamique et présente des caractéristiques clairsemées ou denses. Une différence entre la table indexée et la table imbriquée est que la première ne peut pas être stockée dans la colonne de la base de données, mais la table imbriquée peut être stockée.
Les tableaux associatifs facilitent la maintenance de l'indice et sont créés dans un bloc PL / SQL. C'est comme une table SQL où les valeurs sont obtenues à l'aide de la clé primaire. Ceci est généralement utilisé pour le stockage temporaire des données et peut être utilisé à la place des tables SQL pour éviter le trafic réseau et le stockage sur disque requis par les tables SQL.
Comme les tableaux associatifs ne stockent pas de données persistantes, ils ne peuvent pas être utilisés avec des instructions SQL telles que SELECT et INSERT. Cependant, ils peuvent être rendus sans fin pour une session de la base de données en déclarant leur type de données en tant que package et en les définissant dans le corps du package.
Syntaxe de la table indexée:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Ici le 'clé' est numérique. Il peut s'agir de BINARY_INTEGER ou PLS_INTEGER. Son type de données peut être varchar, varchar2, long ou string. La clé basée sur varchar doit être mentionnée avec length.
'élément' est le type de données.
'Taille' est le nombre maximum d'éléments. C'est un entier positif.
'taper' est le spécificateur de type.
Implémentation du code avec la table index-by:
DECLARE TYPE age IS TABLE OF NUMBER INDEX BY VARCHAR(25); age_empl age; employee VARCHAR(25); BEGIN -- adding employee details to the table age_empl('Sam') := 30; age_empl('Venu') := 35; -- printing the table contents in the console employee := age_empl.FIRST; WHILE employee IS NOT null LOOP dbms_output.put_line ('Employee name is ' || employee || ' and age is ' || TO_CHAR(age_empl(employee))); employee := age_empl.NEXT(employee); END LOOP; END; /
La sortie du code ci-dessus doit être:
Varrays en PL / SQL
Les Varrays stockent un nombre fixe d'éléments et sont comme un tableau unidimensionnel. Cependant, le nombre d'éléments peut être modifié lors de l'exécution. Il s'agit d'un ensemble consécutif d'éléments de types de données similaires. Il peut être stocké dans une table de base de données qui peut être manipulée à l'aide d'instructions SQL. Mais le processus n'est pas aussi simple et flexible que dans une table imbriquée.
La taille maximale de Varray est définie dans sa définition de type. Il a un agencement de mémoire l'un après l'autre commençant par 1 indice et l'adresse d'emplacement la plus basse pointe vers l'élément de départ et l'adresse d'emplacement la plus élevée pointe vers l'élément final. Tous les éléments d'un Varray sont identifiés par un index.
Ce type de collection a un indice numérique et a des caractéristiques denses. Ainsi, les éléments du tableau ne peuvent pas être supprimés entre les deux. Soit le Varray entier doit être supprimé, soit sa fin peut être coupée. En raison de ses caractéristiques denses, il a moins de flexibilité d'utilisation.
Le Varray peut être créé soit dans un bloc PL / SQL, soit au niveau du schéma. Il est traité comme un objet de base de données accessible dans la base de données ou dans un sous-programme. Varray est utilisé plus fréquemment lorsque nous connaissons la taille du tableau. Il doit être initialisé avant de les utiliser et il peut être initialisé à l'aide d'un constructeur. Sa valeur est NULL lorsqu'elle est déclarée et doit être initialisée avant de référencer ses éléments.
Syntaxe de Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Ici,
'taper' est le spécificateur de type.
'élément' est le type de données.
'Taille' est le nombre maximum d'éléments dans un tableau. C'est un entier positif.
Déclaration et initialisation des variables de variable
Après avoir créé un Varray, nous pouvons le déclarer de la manière décrite ci-dessous:
Syntaxe:
name type_n (:= type_n(...));
Ici,
'Nom' est le nom Varray.
«Type_n» est le type de Varray.
«Type_n (…)» est le constructeur de type Varray. Les listes d'arguments sont mentionnées par un séparateur virgule et de type Varray.
Nous devons initialiser une variable Varray avant de l'utiliser, sinon cela donne une erreur de collection non initialisée. L'initialisation se fait de la manière décrite ci-dessous.
Syntaxe:
name type_n := type_n();
Cela initialisera la variable avec zéro élément. Afin de remplir des éléments dans les variables varray, la syntaxe est:
name type_n := type_n(e1, e2, ...);
Accéder aux éléments de Varray
Les éléments sont accessibles par le processus décrit ci-dessous:
nom (m); où m est l'index d'élément qui commence par 1 et se termine par le décompte maximum du nombre d'éléments de type Varray. Dans le cas où m est au-delà de la plage de 1 et du nombre maximum du nombre d'éléments, SUBSCRIPT_BEYOND_COUNT l'exception est levée par PL / SQL.
La taille de Varray peut être modifiée à l'aide de l'instruction ALTER.
Implémentation de code avec ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
La sortie du code ci-dessus doit être.
comment regarder l'anime en ligne gratuitement
Implémentation du code avec Varray:
DECLARE type countrynames IS VARRAY(3) OF VARCHAR2(50); type currency IS VARRAY(3) OF VARCHAR2(15); country countrynames; cur currency; addition integer; BEGIN -- adding country and its currency to the table country := countrynames('INDIA', 'USA', 'UK'); cur:= currency('INR', 'DOLLAR', 'POUND'); -- returns count of number of countries in varray addition := country.count; -- printing the content to the console dbms_output.put_line('Total Number of countries : '|| addition); FOR i in 1 .. addition LOOP dbms_output.put_line('Country: ' || country(i) || ' ,Currency : ' || cur(i)); END LOOP; END; /
La sortie du code ci-dessus doit être:
Différences entre les variables et les tables imbriquées
Les différences sont les suivantes:
- Alors que nous travaillons sur un scénario où le nombre d'éléments est connu et ils sont disposés séquentiellement, les Varrays sont généralement utilisées. Un Varray qui est stocké dans une base de données conserve ses indices et sa séquence. Il est toujours conservé comme un seul objet. Tandis que les tables imbriquées sont utilisées lorsque le nombre d'éléments n'est pas limité.
- La table imbriquée a des caractéristiques clairsemées qui lui permettent de supprimer n'importe quel élément de n'importe quelle position et pas toujours de la fin. L'ordre et l'indice d'une table imbriquée ne sont pas conservés lors de son stockage dans la base de données. Les éléments de Varray sont toujours maintenus en séquence.
Différences entre les tableaux associatifs et les tables imbriquées
Les différences sont les suivantes:
- Les tables imbriquées peuvent être stockées dans une colonne de la base de données, mais les tableaux associatifs ne le sont pas. Les tables imbriquées maintiennent des relations de données appropriées qui sont stockées de manière persistante.
- Les tableaux associatifs conviennent aux petites tables de recherche où la collection peut être construite en mémoire à chaque fois qu'un package est initialisé ou qu'une procédure est appelée. Ils sont un bon choix lorsque la taille n'est pas connue à l'avance. Les valeurs d'index d'un tableau associatif sont flexibles car les indices de ce tableau ne sont pas dans l'ordre ou peuvent être négatifs ou une chaîne au lieu d'un nombre.
Foire aux questions et réponses
Q # 1) Pourquoi utilisons-nous des collections en PL / SQL?
Répondre: Il existe trois types de collections: les tables imbriquées, les tableaux associatifs et les variables. Les tables imbriquées peuvent stocker un nombre aléatoire d'éléments. Les Varrays peuvent stocker un nombre fixe d'éléments et les tableaux associatifs nous permettent de rechercher des éléments avec des nombres et des chaînes aléatoires.
Q # 2) Quelle est la table imbriquée dans PL / SQL?
Répondre: Une table imbriquée est de nature 1 dimensionnelle et sa taille ne reste pas fixe. Ils sont accessibles dans les blocs SQL et PL / SQL. Il peut être utilisé dans les enregistrements, les définitions d'objets et les tables.
Q # 3) Qu'est-ce qu'une collecte en bloc dans Oracle PL / SQL?
Répondre: Une collection en bloc est une méthode d'obtention de données lorsque le moteur PL / SQL informe le moteur SQL d'accumuler plusieurs lignes à la fois et de les stocker dans une collection.
Q # 4) Pourquoi la collecte groupée est-elle plus rapide dans Oracle?
Répondre: La collecte en masse améliore les performances en réduisant l'interaction entre le moteur PL / SQL et la base de données.
Q # 5) Qu'est-ce que Varray dans PL / SQL?
Répondre: Il s'agit d'une structure de données PL / SQL utilisée pour stocker une collection homogène d'éléments du même type de données dans une séquence. Il est principalement utilisé pour contenir un ensemble ordonné de données.
Q # 6) Pouvons-nous supprimer l'élément de Varray dans Oracle?
Répondre: Nous ne pouvons pas modifier ou supprimer des éléments dans un Varray à l'aide d'instructions SQL directement. Nous devons sélectionner le Varray de la table, le modifier en PL / SQL, puis modifier la table et le stocker dans un nouveau Varray.
Q # 7) Quelle est la différence entre la table imbriquée et Varray?
Réponse: Les différences sont énumérées ci-dessous:
- Nous prenons le Varray lorsque le nombre d'éléments est connu d'avant. Cette restriction n'est pas possible dans les tables imbriquées.
- Dans Varray, les éléments sont utilisés en séquence. La table imbriquée a des caractéristiques à la fois denses et éparses.
- Les éléments sont toujours classés dans Varray. Les éléments peuvent ou non être en ordre dans la table imbriquée.
Conclusion
Dans ce tutoriel, nous avons discuté en détail de certains des concepts de base de PL / SQL qui sont essentiels pour développer des connaissances à ce sujet.
Nous avons couvert les sujets suivants énumérés ci-dessous:
- Compréhension de base des collections PL SQL (méthodes et exceptions).
- Varrays.
- Tables imbriquées
- Tables indexées
<< PREV Tutorial | Tutoriel SUIVANT >>
lecture recommandée
- Types de données de tableau - tableau int, tableau double, tableau de chaînes, etc.
- Java Array - Comment imprimer des éléments d'un tableau en Java?
- Tutoriel PL SQL pour les débutants avec des exemples | Qu'est-ce que PL / SQL
- Java Array - Déclarer, créer et initialiser un tableau en Java
- Tutoriel Java Array Length avec des exemples de code
- Différences exactes entre SQL et NoSQL et savoir quand utiliser NoSQL et SQL
- Différence entre SQL et MySQL et SQL Server (avec exemples)
- Classe imbriquée JUnit 5: Tutoriel @Nested avec exemples