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

Comment créer une table imbriquée en tant qu'objet de base de données dans Oracle

Si vous envisagez de réutiliser la table imbriquée que vous souhaitez créer, le faire en tant qu'objet de base de données est le meilleur choix pour vous. Vous pouvez les stocker dans votre base de données de manière permanente et les utiliser quand vous le souhaitez.

En plus de créer une collection PL/SQL de type table imbriquée dans un bloc PL/SQL, vous pouvez également les créer en tant qu'objet de base de données et les stocker de manière permanente. Vous pouvez également les réutiliser quand vous le souhaitez. La table imbriquée créée en tant qu'objet de base de données peut être basée sur un type de données primitif ou un type de données défini par l'utilisateur. Dans ce didacticiel, nous nous concentrerons sur le premier et laisserons le second pour le prochain didacticiel.

Comment créer une collection de type de table imbriquée basée sur un type de données primitif

Par type de données primitif, nous entendons les types de données prédéfinis par le langage et nommés par un mot-clé réservé. Vous pouvez vous référer à ce document Oracle pour en savoir plus sur les types de données PL/SQL.

Les tables suivantes n'ont aucune contrainte, index ou quoi que ce soit conçu dessus et sont créées uniquement pour montrer comment créer une table imbriquée en tant qu'objet de base de données.

Étape 1 :Activer la sortie du serveur

SET SERVEROUTPUT ON;

Étape 2 :Créer une collection de types de tableaux imbriqués

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10);
/

L'instruction ci-dessus en cas d'exécution réussie créera une table imbriquée avec le nom "my_nested_table" qui sera basée sur le type de données primitif VARCHAR2.

Étape 3 :Comment utiliser le tableau imbriqué ?

Le type de collection que nous avons créé ci-dessus peut être utilisé pour spécifier le type d'une colonne d'une table.

CREATE TABLE my_subject(
	  sub_id    	NUMBER,
	  sub_name  	VARCHAR2 (20),
	  sub_schedule_day    my_nested_table
) NESTED TABLE sub_schedule_day STORE AS nested_tab_space;
/

Le tableau ci-dessus est un tableau normal sauf que ses 3 colonnes sont de type tableau imbriqué pouvant contenir plusieurs valeurs. Afin de définir une colonne d'une table comme type de table imbriquée, vous devez indiquer au compilateur le nom de la colonne et une table de stockage. Vous pouvez le faire en utilisant les clauses NESTED ABLE et STORE AS, comme nous l'avons fait ici à la ligne numéro 5. En utilisant la clause NESTED TABLE, nous spécifions le nom de la colonne et en utilisant la clause STORE AS, nous spécifions la table de stockage pour la table imbriquée.

Vous pouvez vous référer au didacticiel vidéo où j'ai expliqué étape par étape le processus de création de tableau ci-dessus.

Insérer des lignes dans le tableau

INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day)
VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));

Vous insérez des lignes dans le tableau imbriqué de la même manière que vous insérez dans le tableau normal. Cependant, pour insérer des données dans la colonne de type de table imbriquée, vous devez d'abord écrire le nom de la table imbriquée qui, dans notre cas, est 'my_nested_table' (voir l'étape 2), puis écrire les données en fonction du type de données de votre table imbriquée et placez-le entre parenthèses.

Récupérer les données du tableau

Une simple instruction SELECT DML peut être utilisée pour récupérer les données de la table.

SELECT * FROM my_subject;

Cette simple déclaration DML vous montrera toutes les données stockées dans la table que nous avons créée ci-dessus. Pour voir les données d'une ligne spécifique, vous pouvez utiliser la clause WHERE avec SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Si vous le souhaitez, vous pouvez vous aider de la sous-requête pour simplement vérifier les données de la colonne que vous avez définie comme type de table imbriquée.

SELECT * FROM TABLE (
  SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101
);

La requête ci-dessus vous montrera les données du sujet qui a l'ID de sujet 101 uniquement à partir de la colonne sub_schedule_day. Dans cette requête, nous avons utilisé l'expression TABLE pour ouvrir l'instance et afficher les données au format relationnel.

Mettre à jour les données du tableau

Vous pouvez soit mettre à jour toutes les valeurs de la colonne que vous définissez comme table imbriquée, soit mettre à jour une seule instance de celle-ci.

Mettez à jour toutes les valeurs de la colonne de type de tableau imbriqué.

UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') 
WHERE sub_id = 101;
/

La requête ci-dessus mettra à jour toutes les valeurs de sub_schedule_day de 'Mon', 'Fri' à 'Tue' et 'Sat'. Supposons maintenant que vous souhaitiez mettre à jour une seule instance de cette colonne en remplaçant "Sat" par "Thu". Comment allez-vous faire ?

Mettre à jour une seule instance de table imbriquée

Afin de mettre à jour une seule instance de colonne de type table imbriquée, vous pouvez à nouveau vous aider de l'expression TABLE.

UPDATE TABLE
  (SELECT sub_schedule_day FROM my_subject 
  WHERE sub_id = 101) A
SET A.COLUMN_VALUE   = 'Thur' 
WHERE A.COLUMN_VALUE = 'Sat';

La requête ci-dessus mettra à jour la valeur de "Sat" à "Thur" dans le tableau.

J'espère que vous avez apprécié la lecture et appris quelque chose de nouveau. Assurez-vous de vous abonner à notre chaîne, car de nombreux didacticiels intéressants sont en route. Merci et bonne journée !