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

Comment créer une table imbriquée à l'aide du type de données défini par l'utilisateur dans la base de données Oracle

Salut les gars! Aujourd'hui, nous allons apprendre à créer une collection de types de tables imbriquées à l'aide d'un type de données défini par l'utilisateur. J'espère que vous avez passé un bon moment avec le dernier tutoriel où nous avons appris le processus de création d'une table imbriquée avec un type de données primitif. Je vous suggère fortement de jeter un œil à ce didacticiel car nous allons utiliser les concepts à partir de là.

Semblable au type de données primitif, une table imbriquée peut également être créée à l'aide de types de données définis par l'utilisateur. Pour la démonstration, nous utiliserons l'utilisateur Oracle Object. Les objets ne nécessitent aucune introduction, si vous avez déjà étudié les concepts POO. Dans Oracle, comme dans d'autres langages de programmation, le type d'objet est une sorte de type de données qui fonctionne de la même manière que d'autres types de données tels que Char, Varchar2, Number, etc., mais avec plus de flexibilité.

Pour créer un objet Oracle, nous utilisons notre ancienne et fidèle instruction "Create Type".

CREATE OR REPLACE TYPE object_type AS OBJECT (
  obj_id  NUMBER,
  obj_name  VARCHAR2(10)
);
/

L'instruction ci-dessus créera un objet oracle avec le nom "type d'objet" avec deux attributs obj_id et obj_name en cas d'exécution réussie. Ce type de données peut ensuite être utilisé pour créer une table imbriquée.

CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Je pense que si vous avez vérifié le dernier tutoriel, vous trouverez cette déclaration ci-dessus très familière, à l'exception du type d'élément qui est un type de données primitif. Ici, nous utilisons un type de données défini par l'utilisateur qui est un objet Oracle.

La déclaration ci-dessus a été expliquée en détail dans le dernier tutoriel que vous pouvez consulter ici.

Que signifie la création d'une table imbriquée à l'aide d'Oracle Object ?

Chaque fois que vous créez une table imbriquée à l'aide d'un objet Oracle, les attributs de l'objet deviennent les colonnes de cette table. Par exemple, dans notre cas, nous avons créé une table imbriquée 'My_NT' en utilisant le type de données défini par l'utilisateur qui est un objet Oracle 'Object_Type' qui a deux attributs obj_id et obj_name. Ces deux attributs de l'objet agiront comme les colonnes du tableau. L'image suivante vous aidera à comprendre cela plus clairement.

Maintenant que nous avons créé la table imbriquée à l'aide du type de données défini par l'utilisateur, il est temps de la mettre au travail.

CREATE TABLE Base_Table(
  tab_id  NUMBER,
  tab_ele My_NT
)NESTED TABLE tab_ele STORE AS stor_tab_1;
/

La table ci-dessus nommée 'Base_Table' est simple et comporte 2 colonnes 'tab_id' et 'tab_ele'. La première colonne est de type de données numérique tandis que la deuxième colonne est de type tableau imbriqué. Cela signifie que la deuxième colonne contient une table et cette table est notre table imbriquée "My_Nt"

Bien que cette 'Base_Table' soit une table simple, mais l'une de ses colonnes contient une table imbriquée qui soulève des questions telles que :

Comment insérer des données dans le tableau ? Comment mettre à jour les données du tableau ? Ou comment récupérer les données de la table ? Essayons de trouver les réponses à toutes ces questions une par une.

Comment insérer des données dans le tableau imbriqué ?

Oui, je suis d'accord que l'insertion de données dans une table qui a une colonne de type table imbriquée peut être délicate, mais nous devons en quelque sorte trouver le moyen de le faire. Comme un tableau sans données ne nous est d'aucune utilité. À droite? Voyons comment nous pouvons faire cela.

 INSERT INTO base_table (tab_id, tab_ele) VALUES
 (801,  -- value for 1st colum 
   My_NT (object_type (1,'Superman') -- values for 2nd column )
 );

Comme vous pouvez le voir dans cette instruction INSERT, tout est identique à un insert DML normal, à l'exception de la ligne numéro 3 où nous insérons des données dans la deuxième colonne de la table. Afin d'insérer des données dans la colonne qui est de type Nested Table vous devez d'abord écrire le nom de votre table imbriquée qui dans ce cas est 'My_NT' puis vous devez écrire le nom de votre Oracle Object qui ici est 'Object_Type' suivi des valeurs que vous souhaitez insérer dans votre tableau. N'oubliez pas de faire correspondre les parenthèses pour le nom de la table et le nom de l'objet, sinon vous obtiendrez une erreur.

Comment mettre à jour les valeurs de la table imbriquée ?

UPDATE base_table SET tab_ele = My_NT(object_type(1,'SpiderMan')) WHERE tab_id = 801; 

L'instruction DML ci-dessus mettra à jour les valeurs en conséquence en cas d'exécution réussie.

Comment récupérer les données de la table imbriquée ?

Vous pouvez simplement exécuter l'instruction Select sur votre table pour obtenir les données.

Select tab_id, tab_ele FROM base_table;

L'image suivante vous montrera le résultat renvoyé par cette table.

Comme vous pouvez le voir, cette instruction SELECT vous montrera les données des colonnes qui sont de type de données principal, mais uniquement le nom de votre table imbriquée avec l'objet Oracle de la colonne que vous définissez comme type de table imbriquée. Vous pouvez facilement surmonter ce problème en utilisant une expression TABLE comme celle-ci.

SELECT * FROM TABLE(
  SELECT tab_ele FROM Base_Table WHERE tab_id = 801
)

L'exécution réussie de la requête ci-dessus vous montrera les données de la deuxième colonne de votre table "Base_Table" dans un format relationnel.

C'est tout pour ce tutoriel, j'espère que vous avez apprécié et appris quelque chose de nouveau. Assurez-vous de vous abonner et de vous inscrire. Bonne journée !