CREATE TYPE-- création de adresse_type
CREATE TYPE adresse_type AS (
rue VARCHAR(100),
ville VARCHAR(50),
code_postal CHAR(5)
);
-- création de la table Personne
CREATE TABLE Personne (
nom VARCHAR(50),
prenom VARCHAR(50),
adresse adresse_type
);
-- insertion d'une ligne
INSERT INTO Personne VALUES
('Dalton', 'Joe', ('42 rue de la santé', 'Paris', '75014')::adresse_type);
-- aperçu
SELECT * FROM Personne;
+------+------+----------------------------------+
|nom |prenom|adresse |
+------+------+----------------------------------+
|Dalton|Joe |("42 rue de la santé",Paris,75014)|
+------+------+----------------------------------+
-- accès à un champ particulier
SELECT (adresse).ville FROM Personne;
+-----+
|ville|
+-----+
|Paris|
+-----+OBJECT TYPE (relationnel objet)
-- création de l'objet adresse_type
CREATE OR REPLACE TYPE adresse_type AS OBJECT (
rue VARCHAR(100),
ville VARCHAR(50),
code_postal CHAR(5)
);
-- création de la table Personne
CREATE TABLE Personne (
nom VARCHAR(50),
prenom VARCHAR(50),
adresse adresse_type
);
-- insertion d'une ligne
INSERT INTO Personne VALUES
('Dalton', 'Joe', adresse_type('42 rue de la santé', 'Paris', '75014'));
-- aperçu
SELECT * FROM Personne;
+------+------+--------------------------------+
|NOM |PRENOM|ADRESSE |
+------+------+--------------------------------+
|Dalton|Joe |{42 rue de la santé,Paris,75014}|
+------+------+--------------------------------+
-- accès à un champ particulier
SELECT TREAT(P.adresse AS adresse_type).ville FROM Personne P;
+------------------------------------+
|TREAT(P.ADRESSEASADRESSE_TYPE).VILLE|
+------------------------------------+
|Paris |
+------------------------------------+