bases de données orientées objets sgbd relationnels...

68
Bases de données orientées objets SGBD relationnels-objets un exemple : ORACLE

Upload: lyhanh

Post on 13-Sep-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Bases de données orientées objetsSGBD relationnels-objets

un exemple : ORACLE

SQL3- SQL3 = SQL2 pour BD relationnelles+ des extensions

– orienté-objet– multi-media– spatial– Séries temporelles

- Ce chapitre porte sur l'extension OO du relationnel : le relationnel-objet- SQL3 est compatible avec SQL2- Les BD et applications existantes en SQL2 tournent sous SQL3 => passage facile du relationnel au relationnel-objet

Comment étendre le relationnel à l'OO ?- Concept de table quasi inchangé- Nouveau concept, TYPE, qui décrit :

– les structures complexes et multivaluées– le format des objets– les méthodes

- hiérarchie d'héritage des types- Un nouveau constructeur de domaine : REF, pour définir les liens de composition

- Tables de 3 sortes– tables "normales" de tuples en 1ère forme normale– tables de tuples en non 1FN : tables de valeurs

structurées– tables d'objets

LES TYPES

- Domaines usuels de SQL : CHAR, VARCHAR, NUMBER, DATE…- Nouveaux domaines définis par l'utilisateur, propres à la BD, pour décrire :→ un multivalué :

– TYPE VARRAY : vecteur– TYPE nested TABLE : table insérée à la place

d'une valeur→ un complexe … éventuellement avec oid (!)

– valeur complexe– objet (oid, valeur complexe)

Type VARRAYCREATE TYPE nom-type AS

VARRAY(nbmax) OF nom-type2Où nom-type2 est : type usuel de SQL (CHAR, VARCHAR, NUMBER…) ou type défini par l'utilisateur

⇒ est une valeur multivaluée de type vecteur

CREATE TYPE Tprenoms AS VARRAY(4) OFVARCHAR(20)

/* Tprenoms est un type Vecteur de 4 VARCAHAR(20) */

Exemple de valeur : ('Marc', 'Pierre')CREATE TABLE Personne

(AVS CHAR(11), nomVARCHAR(20), prenoms Tprenoms)

Type VARRAY

CREATE TYPE Tprenoms AS VARRAY(4) OFVARCHAR(20)

//* Tprenoms est un type Vecteur de 4 VARCAHAR(20) */Type created.

SQL>

Exemple de valeur : ('Marc', 'Pierre')

Type VARRAY

CREATE TABLE Personne (AVS CHAR(11),

Nom VARCHAR(20), prenoms Tprenoms)/Table created.

SQL>

Type TABLE insérée (nested TABLE)

CREATE TYPE nom-type AS TABLE OF nom-type2/Où nom-type2 :

– type usuel de SQL (CHAR, VARCHAR, NUMBER…)– type défini par l'utilisateur

⇒ valeur multivaluée de type tablepas de nombre maximum de valeurspas d'ordreindexable

ex. 021 456 55 99 021 456 66 77 021 691 55 77

022 555 66 88

Type TABLE insérée (nested TABLE), suite

CREATE TYPE Ttelephones AS TABLE OF CHAR(10)/Type created.

SQL>

Type TABLE insérée (nested TABLE), suite

drop table personne /Table dropped.

SQL> CREATE TABLE Personne ( AVS CHAR(11),

Nom VARCHAR(20), tel Ttelephones ) NESTED TABLE tel STORE AS TableTel/Table created.

SQL>Rmq : L'utilisateur doit donner un nom à la table qui contiendra les téléphones de toutes les personnes

Type OBJECT

Joue deux rôle :• constructeur de valeur complexe (monovaluée) constructeur d'objet = (oid , valeur complexe)

CREATE TYPE nom-type AS OBJECT( nom1 nom-type1 , nom2 nom-type2 , … <définition de méthodes> )/où nom-typei : type usuel de SQL (CHAR, VARCHAR, NUMBER…) type défini par l'utilisateur

Type OBJECT (suite)

Utilisation comme constructeur de valeur complexe :

CREATE TYPE Tadresse AS OBJECT( rue VARCHAR(20), numero VARCHAR(4), Localite VARCHAR(20), NPA CHAR(4) )/Type created.

SQL>

Type OBJECT (suite)

drop table personne/Table dropped.

SQL> CREATE TABLE Personne ( AVS CHAR(11),

nom VARCHAR(20), prenoms Tprenoms, adr Tadresse )/Table created.

SQL>

Type OBJECT - constructeur d'objet

CREATE TYPE Tpersonne AS OBJECT( AVS CHAR(11), nom VARCHAR(20), prenoms Tprenoms, adr Tadresse )/Type created.

SQL>

Type OBJECT - constructeur d'objet

Table d'objets Tpersonne :

CREATE TABLE LesPersonnes OF Tpersonne;Table created.

SQL> => Création d'une table LesPersonnes dont les lignes sont de type Tpersonne

Type OBJECT - constructeur d'objet (suite)

Note : On peut créer plusieurs tables d'objets de format Tpersonne :

Insertion : INSERT INTO LesPersonnes VALUES (12345123451, 'Rochat', Tprenoms('Marc','Alien'), Tadresse('Jaures', '40','Paris','75') )/1 row created.

SQL>

Type OBJECT - constructeur d'objet (suite)

SQL> select * from LesPersonnes ;AVS NOM----------- --------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------12345123451 RochatTPRENOMS('Marc', 'Alien')TADRESSE('Jaures', '40', 'Paris', '75 ')

SQL>

=> création d'un objet (oid + valeur), permanent, stocké dans la table LesPersonnes

Type OBJECT - constructeur d'objet (suite)

Rmq : La table LesPersonnes a une colonne supplémentaire invisible, gérée par le SGBD qui contient l'oid de chaque objet.

Cette colonne est automatiquement indexée => Recherche d'un objet d'oid donné plus rapide

Trois sortes de tables1- Table du relationnel classique : ensemble de tuples en première forme normale (1FN)

SQL> create table personne1 2 (avs char(11), 3 nom varchar(20), 4 prenom varchar(20), 5 rue varchar(20), 6 numero varchar(4), 7 localite varchar(20), 8 npa char(5) 9 );

Table created.

SQL>

SQL> insert into personne1 values('12', 'toto', 'marc', 'de paris', '54', 'HAVRE', '76');1 row created.

SQL> select * from personne1;AVS NOM PRENOM RUE NUME -------------------- -------------------- -------------------- ----

LOCALITE NPA-------------------- ----

HAVRE 76

SQL>

12 toto marc de paris 54

Trois sortes de tables (2)

2- Table de valeurs structurées : ensemble de tuples en non première forme normale

SQL> create table personne2 2 ( avs char(11), 3 nom varchar(20), 4 prenoms Tprenoms, 5 adr Tadresse 6 );

Table created.

SQL>

SQL> insert into personne2 values(43, 'JACKY', Tprenoms('aaa', 'bbb', 'ccc'), Tadresse('vagot', 15, 'PARIS', 75) );

1 row created.

SQL> select * from personne2;

AVS NOM----------- --------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------43 JACKYTPRENOMS('aaa', 'bbb', 'ccc')TADRESSE('vagot', '15', 'PARIS', '75 ')

SQL>

Trois sortes de tables (3)

3-Table d'objets Est un ensemble d'objets

CREATE TYPE Tpersonne AS OBJECT ( AVS CHAR(11), nom VARCHAR(20), Prenoms Tprenoms, adr Tadresse )/

CREATE TABLE LesPersonnes OF Tpersonne ;Table created.

SQL>

SQL> insert into LesPersonnes values (55, 'MARCUS', Tprenoms('ABC', 'XYZ'), Tadresse('Maillot', 45, 'ROUEN', 76) );

1 row created.

SQL> select * from LesPersonnes;

AVS NOM----------- --------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------55 MARCUSTPRENOMS('ABC', 'XYZ')TADRESSE('Maillot', '45', 'ROUEN', '76 ')

SQL>

Trois sortes de tables (3)

Note : On peut associer à une table de n'importe quelle sorte les contraintes usuelles de SQL :

PRIMARY KEY (nom-col*), UNIQUE (nom-col*)FOREIGN KEY (nom-col*) REFERENCES nom-table[(nom-col*)] [action], CHECK ( condition)

Types structurés à plusieurs niveaux

- SQL permet de décrire des attributs complexes et multivalués à plusieurs niveaux, en créant un type par constructeur :

– complexe (TYPE OBJECT)– multivalué (TYPE VARRAY ou TABLE insérée)

Types structurés à plusieurs niveaux

Exemple : Table d'objets personnes avec leurs enfants (prenoms et date de naissance) :

CREATE TYPE Tenfants AS OBJECT( prenoms Tprenoms , dateN DATE)/

Type created.

SQL>

Types structurés à plusieurs niveaux (2)

CREATE TYPE Tpersonne2 AS OBJECT( AVS CHAR(11) , nom VARCHAR(20), prenoms Tprenoms , adr Tadresse , enfants Tenfants ) /CREATE TABLE LesPersonnes2 OF Tpersonne2/

InsertionsSQL> insert into LesPersonnes2 values ('12345', 'MERET', Tprenoms('marc','toto'), Tadresse('Dubois', '90', 'PARIS', '92'), null) ;

1 row created.

SQL> insert into LesPersonnes2 values ('12345', 'MERET', Tprenoms('marc','toto'), Tadresse('Dubois', '90', 'PARIS', '92'), Tenfants(Tprenoms('AA', 'BB'), To_char(to_date('2000/10/10', 'YYYY/MM/DD')) )) ;

1 row created.OU BIEN SQL>insert into LesPersonnes2 values ('12345', 'MERET', Tprenoms('marc','toto'), Tadresse('Dubois', '90', 'PARIS', '92'), Tenfants(Tprenoms('AA', 'BB'), to_date('2000/10/10', 'YYYY/MM/DD') )) ;

1 row created.

SQL>

SelectionSQL> select * from lespersonnes2 ;AVS NOM----------- --------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------ENFANTS(PRENOMS, DATEN)--------------------------------------------------------------------------------12345 MERETTPRENOMS('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')

AVS NOM----------- --------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------ENFANTS(PRENOMS, DATEN)--------------------------------------------------------------------------------12345 MERETTPRENOMS('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')TENFANTS(TPRENOMS('AA', 'BB'), '10-OCT-00')

AVS NOM----------- --------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------ENFANTS(PRENOMS, DATEN)--------------------------------------------------------------------------------12345 MERETTPRENOMS('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')TENFANTS(TPRENOMS('AA', 'BB'), '10-OCT-00')

SQL>

SelectionSQL> select nom, prenoms, adr from lespersonnes2;

NOM--------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------MERETTPRENOMS('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')

MERETTPRENOMS('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')

NOM--------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------

MERETTPRENOMS('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')

SQL>S(PRENOMS, DATEN)--------------------------------------------------------------------------------12345 MERETTPRENOMS('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')TENFANTS(TPRENOMS('AA', 'BB'), '10-OCT-00')

SQL>

SelectionSQL> select nom, prenoms, p2.adr.localite from lespersonnes2 p2;

NOM--------------------PRENOMS--------------------------------------------------------------------------------ADR.LOCALITE--------------------MERETTPRENOMS('marc', 'toto')PARIS

MERETTPRENOMS('marc', 'toto')PARIS

NOM--------------------PRENOMS--------------------------------------------------------------------------------ADR.LOCALITE--------------------

MERETTPRENOMS('marc', 'toto')PARIS

SQL>('marc', 'toto')TADRESSE('Dubois', '90', 'PARIS', '92 ')TENFANTS(TPRENOMS('AA', 'BB'), '10-OCT-00')

SQL>

Accès aux valeurs complexes (type OBJECT)

Accès aux composants via la notation pointée :

SQL> create type Tadresse3 as object (rue varchar(20), numero varchar(4), localite varchar (20), npa char(5) ) /Type created.

SQL>

Accès aux valeurs complexes (type OBJECT)

Accès aux composants via la notation pointée :

CREATE TABLE Personne3( AVS CHAR(11) ,

nom VARCHAR(20), prenoms Tprenoms , adr Tadresse )/Table created.

SQL>

Insertion :

SQL> INSERT INTO Personne3 values ('12345123451', 'TOTO', Tprenoms('Marc', 'Pierre'), Tadresse('Fenelon ', '40', 'Le Havre', '76'));

1 row created.

SQL> --Accès :SQL> select p3.adr.localite from personne3 p3 2 where p3.avs='12345123451';

ADR.LOCALITE--------------------Le Havre

SQL>

Accès aux valeurs multivaluées (Types VARRAY et TABLE) Exemples

CREATE TABLE Personne4( AVS CHAR(11) , nom VARCHAR(20) , prenoms Tprenoms , adr Tadresse )Table created.

SQL> SQL> insert into personne4 values('54321', 'JALET', Tprenoms('Annie', 'Martine'), Tadresse('Galet', '55', 'ROUEN', '76') );

1 row created.

SQL>

Accès aux valeurs multivaluées (Types VARRAY et TABLE) Exemples : Personnes dont un prénom est Annie :SQL> SELECT * FROM Personne4 p, TABLE(p.prenoms) pr 2 WHERE pr.COLUMN_VALUE = 'Annie';

AVS NOM----------- --------------------PRENOMS--------------------------------------------------------------------------------ADR(RUE, NUMERO, LOCALITE, NPA)--------------------------------------------------------------------------------COLUMN_VALUE--------------------54321 JALETTPRENOMS('Annie', 'Martine')TADRESSE('Galet', '55', 'ROUEN', '76 ')Annie

SQL>

Accès aux valeurs multivaluées (Types VARRAY et TABLE) - (3)

Accès à toute la collection :

Noms et prénoms des personnes :SQL> SELECT p.nom, p.prenoms FROM Personne4 p;

NOM--------------------PRENOMS--------------------------------------------------------------------------------JALETTPRENOMS('Annie', 'Martine')

SQL>

IDENTITE - ATTRIBUTS REFERENCE

Type OBJECT : constructeur de : valeurs structurées objets (si CREATE TABLE nom-table OF ce-type)

CREATE TYPE Tlogement AS OBJECT( type VARCHAR(15), surface NUMBER(4), Nbpieces NUMBER(3,2))/Type created.

SQL>

IDENTITE - ATTRIBUTS REFERENCE (2)

CREATE TABLE Habitant1 ( AVS CHAR(11), Nom VARCHAR(20) , prenoms Tprenoms, habite Tlogement)/

Table created.

SQL>

Ici, habite : est une valeur structurée

IDENTITE - ATTRIBUTS REFERENCE (2)

CREATE TABLE Habitant2 ( AVS CHAR(11), Nom VARCHAR(20) , prenoms Tprenoms, habite REF Tlogement)/Table created.

SQL>

habite : est l'oid de Tlogement=> CREATE TABLE LesLogements OF Tlogement

Deux types d'attributs référence

1. EXTERNAL KEY : valeur de la clé

Non orientéCREATE TABLE Ancetre

( num NUMBER(3) PRIMARY KEY, Nom VARCHAR(20) , prenoms Tprenoms , pere NUMBER(3) REFERENCES Ancetre , mere NUMBER(3) REFERENCES Ancetre)

/Table created.

SQL>

Deux types d'attributs référence (2)

2. REF nom-type : lien de composition objet (oid)orienté lien inverse non géré par le SGBDpas de mise à jour faite par le SGBD lors des suppressions d'objets composants

=> Faire attention aux références invalides !

Attribut référence objet (3)

CREATE or replace TYPE Tancetre AS OBJECT( num NUMBER(3), nom VARCHAR(20) , prenoms Tprenoms , pere REF Tancetre , mere REF Tancetre )/Type created.

SQL> CREATE TABLE LesAncetres OF Tancetre(PRIMARY KEY(num))/Table created.

SQL>

Manipulation des att. référence objet

- Il y a trois nouveaux opérateurs permettent de récupérer l'oid ou la valeur d'un objet :

REF(objet) => l'oid de l'objetVALUE(objet) => valeur structurée sous la forme nom-type(valeur)

DEREF(oid) => valeur structurée sous la forme nom-type(valeur)

Manipulation des att. référence objet (1)

Rappels :

CREATE TYPE Tancetre AS OBJECT( num NUMBER(3), nom VARCHAR(20) , Prenoms Tprenoms , pere REF Tancetre , mere REF Tancetre)/

Manipulation des att. référence objet (2)Insérer dans la table LesAncêtres une nouvelle personne : (12, Philippe Michel Rochat, de père le numéro 10 et de mère le numéro 11)

=> INSERT INTO LesAncetres VALUES( 12 , 'Rochat' , Tprenoms('Philippe', 'Michel') ,

(SELECT REF(x) FROM LesAncetres x WHERE x.num=10),(SELECT REF(x) FROM LesAncetres x WHERE x.num=11)

)/1 row created.

SQL>

METHODES

Chaque type OBJECT peut avoir des méthodes :CREATE TYPE nom-type AS OBJECT( déclaration des attributs , déclaration des signatures des méthodes ) Signature d'une méthode :

MEMBER FUNCTION nom-méthode ( nom-param1 [ IN / OUT ] type1 , ….) RETURN type-n

MEMBER PROCEDURE nom-méthode ( nom-param1 [ IN / OUT ] type1 , ….)

Corps d'un type OBJECT

Il contient le code de ses méthodes. Le code peut contenir des : instructions PL/SQL (ou JAVA) instructions SQL appels de méthodes

CREATE TYPE BODY nom-type ASMEMBER FUNCTION / PROCEDURE nom-méthode1 ( nom-param11 [ IN / OUT ] type11 , ….)BEGIN

code de-la-méthode1 END

MEMBER FUNCTION / PROCEDURE nom-méthode2 ( nom-param21 [ IN / OUT ] type21 , ….)BEGIN

code de-la-méthode2 END….

HIERARCHIE DES TYPES OBJECT

On peut créer des sous-types d'un type OBJECT => héritage des attributs et méthodesavec possibilité de redéfinir le code des méthodes dans les sous-types

Pas d'héritage multiple ATTENTION : Pas de hiérarchie des tables Mais une table d'objets de format un sur-type peut contenir des objets du sur-type et de ses sous-types

Exemple de hiérarchie

CREATE TYPE Tpersonne5 AS OBJECT( AVS CHAR(11), nom VARCHAR(20) , Prenoms Tprenoms, conjoint REF TPersonne) NOT FINAL/Type created.

SQL>Rmq : NOT FINAL : est un mot clé obligatoire si le type a des sous-types; Par défaut, c'est FINAL

Exemple de hiérarchie (2)

CREATE TYPE Tetudiant UNDER Tpersonne5( faculte VARCHAR(18), cycle VARCHAR(18))/Type created.

SQL> CREATE TABLE LesPersonnes5 OF Tpersonne5;Table created.

SQL> CREATE TABLE LesEtudiants OF Tetudiant;Table created.

SQL>Note : Il n'y a pas inclusion de population entre LesEtudiants et LesPersonnes5. Les tables sont indépendantes l'une de l'autre.

Exemple de hiérarchie (3)

-La table LesPersonnes5 peut contenir des objets de type Tpersonne5 et Tétudiant :

SQL> INSERT INTO LesPersonnes5 VALUES(11111, 'Rochat', Tprenoms('Philippe'), NULL);

1 row created.

SQL>

Exemple de hiérarchie (3)

=> création d'un objet de type Tpersonne5 et insertion dans la table LesPersonnes5

ISQL> INSERT INTO LesPersonnes5 VALUES(Tetudiant(22222, 'Muller', Tprenoms('Annie', 'Marie'), NULL, 'HEC', 'Master'));

1 row created.

SQL>RMQ : au lieu de NULL →(select REF(p) FROM personne p WHERE avs='213232')

=> création d'un objet de type Tetudiant et insertion dans la table LesPersonnes- De même, l'attribut référence conjoint peut contenir un oid d'objet de type Tpersonne ou Tetudiant

Autre exemple

SQL> CREATE TYPE etat_civil AS OBJECT (nom varchar(), prenom varchar(15), annee char(4) ) /

Type created.

SQL> create type pers as object (id number(5), etc etat_civil, adr Tadresse) not final /

Type created.

SQL>

SQL> CREATE TYPE ens UNDER pers( grade VARCHAR(20) )/Type created.

SQL>

CREATE TABLE unePers OF pers;Table created.

SQL> CREATE TABLE unEns OF ens;

Table created.

SQL>

Autre exemple

QL> INSERT INTO unePers VALUES (pers(2000, etat_civil('Dupond','Dupond','1990'), Tadresse ('Republique', 7600, 'Le Havre', '7600') ));

1 row created.

SQL>INSERT INTO unEns VALUES ( ens(2000, etat_civil('Durand','Marc','2000'), Tadresse ('Republique', 7600, 'Le Havre', '7600'), 'professeur'));1 row created.

SQL>

Fonctions dans les types

CREATE TYPE departement_type AS OBJECT ( numDept number,

NomD VARCHAR(30),Lieu VARCHAR(30),

MEMBER FUNCTION getLieu RETURN VARCHAR )/Type created.

SQL>

Fonctions dans les types

SQL> CREATE TYPE BODY departement_type AS MEMBER FUNCTION getLieu RETURN VARCHAR ISBegin

Return lieu;End;

End;/Type body created.

SQL>

Héritage, Ajouts d'attributs, méthodes

CREATE TYPE adresse_type AS OBJECT ( num number,

rue VARCHAR(20),ville VARCHAR(20),

cp NUMBER(2) )/Type created.

SQL>

Héritage, Ajouts d'attributs, méthodes

CREATE TYPE employe_type AS OBJECT ( matr number,

nomE VARCHAR(30),salE number(8,2),adrE adresse_type )

NOT FINAL /Type created.

SQL>

Héritage, Ajouts d'attributs, méthodes

– création sous-type :

CREATE TYPE commercial_type UNDER employe_type( commE number(8,2) ) NOT FINAL/Type created.

SQL>

Héritage, Ajouts d'attributs, méthodes

– ajout d'un attribut :SQL> ALTER TYPE employe_type ADD ATTRIBUTE date_naissance DATE CASCADE /Type altered.

SQL> – propagation de l'attribut aux tables déjà construites à partir de ce type

Supprimer un type

DROP TYPE employe_type;

Quelques vues du dictionnaire

- USER_TYPES pour les types (et les collections)- USER_TYPE_ATTRS pour les attributs des types- USER_TYPE_METHODS pour les méthodes des types

- USER_OBJECT_TABLES pour les tables objet-relationnelles

FAIRE par exemple : : DESCRIBE departement_type

Création d'une table à partir d'un type dérivé

CREATE TABLE commerciaux OF commercial_type( constraint pk_com pr......... imary key (matr) )/

Rmqs : - Une table est relationnel-objet si elle est construite à partir d'un type : create table … OF ...;- Les lignes de cette table sont considérées comme des objets avec un oid.- On peut utiliser des références pour désigner les lignes de ces tables

Insertion des donnéesINSERT INTO commerciaux (matr, nomE, salE, comm)VALUES ( 234, 'TITI', 3200, 600);

Insertion avec constructeurINSERT INTO employe VALUESemploye_type(125, 'Dupond', …);

Rmq : si le type est un type utilisé par un autre type, l'utilisation d'un constructeur est obligatoire :INSERT INTO employe (matr, nomE, salE, adresse)VALUES ( 1, 'TOTO', 1200, adresse_type(12, 'Victor Hugo', 'Nice') )

Afficher les valeurs des types

SELECT nomE, e.adrE.rue FROM employe e;

Mise à jour : SETSi le type est concerné, utiliser un alias :UPDATE employe e

SET salE = 1200,e.adrE.num = 23

WHERE nomE like '%DUPONT';