("

LABORATOIRE D’INFORMATIQUE DE
L’UNIVERSITE DE PAU ET DES PAYS
DE L’ADOUR

BDD Avancées
SQL3

Richard Chbeir, Ph.D.
Plan!

Encapsulation
des objets
Interrogation
des objets
Manipulation
des objets

Introduction"

10/12/13
Page 2

•  Fonct...
Pourquoi ?

Employe
NumEmp

dept

salaire

ADR

…

…

…

…

…

…

…

…

Approche relationnelle

10/12/13
Page 3
Pourquoi ?

Employe
NumEmp

dept

salaire

ADR

…

…

…

…

…

…

…

…

Employe
NumEmp

dept

salaire

ADR
NOR UE

VILLE

...
Comment faire?

Définition d’un nouveau
Type Abstrait de Données ou TAD

10/12/13
Page 5
Introduction
•  TAD
–  Une structure de données partagée
–  Inclut des méthodes qui sont des procédures ou
des fonctions p...
Introduction
•  Autres types de TAD
–  Large Object Bloc (LOB)
•  Binary LOB (BLOB) : stockage des données
binaires non st...
Introduction
•  Usage des TAD
–  Dans une table
–  Dans un attribut d’une table relationnelle
–  Etc.

10/12/13
Page 8
Introduction
•  Création d’un TAD
–  Syntaxe
SQL> CREATE OR REPLACE TYPE Nom_Type !
!
!AS OBJECT (!
!
!
!Nom_attribut1 !Ty...
Introduction
•  Création d’un TAD
–  Exemple
SQL> CREATE OR REPLACE TYPE adresse_type !
!AS OBJECT (!
!
!norue NUMBER, !
!...
Introduction
•  Création d’un TAD
–  Type utilisé par un attribut d’une table
relationnelle
•  Exemple
SQL> CREATE TABLE e...
Introduction
•  Manipulation des TAD
–  Insertion des tuples
•  Exemple (insérer les informations de l’employé
numéro 1 da...
Introduction
•  Manipulation des TAD
–  Modification des tuples
•  Exemple (modifier le salaire et le numéro de la
rue de ...
Introduction
•  Manipulation des TAD
–  Interrogation des tuples
•  Exemple (trouver tous les employés lyonnais)
SQL>

10/...
Introduction
•  Manipulation des TAD
–  Suppression des tuples
•  Exemple (supprimer(le(tuple(de(l’employé(dont(
l’adresse...
Donner&le&script&SQL&
perme1ant&de&créer&
ce1e&table&
rela6onnelle7objet?!
Numdep

Secrétaire

Budget
nemp

age

nom

D2

...
Donner&le&script&SQL&
perme1ant&&
d’insérer&les&tuples&
suivants&?!

numdep

Secrétaires

budget
Nemp

D3

325000

D4

10/...
Problème!lié!à!la!table!imbriquée!

numdep

Secrétaires

budget
Nemp

D3

325000

D3

10/12/13
Page 18

125000

N1

28

Zi...
Introduction!
•  TAD!et!table!imbriquée!
–  Exemple!(créer!le!type!SecretaireOtype)!
SQL> CREATE OR REPLACE TYPE Secretair...
Introduction!
•  TAD!et!table!imbriquée!
–  Exemple!(créer!le!type!SecretaireSOtype)!
SQL> CREATE OR REPLACE TYPE Secretai...
Introduction!
•  TAD!et!table!imbriquée!
–  Exemple!(créer(la(table(Département)!
SQL> CREATE TABLE Departement (
numdep V...
Introduction
•  Manipulation des TAD
–  Insertion des tuples dans une table
imbriquée
•  Exemple (insérer toutes les infor...
Introduction
•  Manipulation des TAD
–  Modification des tuples dans une table
imbriquée
•  Exemple (modifier l’âge de tou...
Introduction
•  Manipulation des TAD
–  Interrogation des tuples dans une table
imbriquée
•  Exemple (trouver l'âge des se...
Introduction
•  Manipulation des TAD
–  Interrogation des tuples dans une table
imbriquée
•  Exemple (trouver les secrétai...
Introduction
•  Manipulation des TAD
–  Suppression des tuples dans une table
imbriquée
•  Exemple (supprimer les tuples d...
Donner&le&script&SQL&
perme1ant&&de&créer&
la&table&suivante&?!

Employe
NEmp

dept

Lieux
Interventions

ADR

sal
N°

VIL...
Et si avait le schéma suivant ?

Véhicule

Employe
NumEmp

dept

salaire

ADR

N°Véhicule

Num

Type

Marque

Date

…

…

...
Comment le transformer en …
Employe
NumEmp

dept

sal

@veh

ADR
NOR UE

Lieux Interventions

RUE

VILLE

CODE_POSTAL

…

...
Table objet-relationnelle
•  Définition
–  Une table est dite objet-relationnelle quand
elle dépend d un TAD
Les enregistr...
Table objet-relationnelle
•  Pseudo-colonnes
–  ROWID
•  Désigne une pseudo-colonne qui contient l adresse physique de cha...
Table objet-relationnelle
•  Pour créer une table Objet-relationnelle
ayant une structure d un type
préalablement défini
S...
Table objet-relationnelle
•  Création des types utilisés

SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT!
!
!(no_int
!
...
Table objet-relationnelle
•  Création de la table

SQL> CREATE TABLE Contrats OF contrat_typ!
(CONSTRAINT PK_con PRIMARY K...
Table objet-relationnelle
•  Création des types utilisés
SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT!
!
!(no_immat
!VARC...
Table objet-relationnelle
•  Création de la table
SQL> CREATE TABLE Vehicules OF veh_typ!
(CONSTRAINT PK_veh PRIMARY KEY(n...
Table objet-relationnelle
•  Création des types utilisés
SQL> CREATE OR REPLACE TYPE adresse_type !
!AS OBJECT (!
!
!norue...
Table objet-relationnelle
•  Création des types utilisés
–  Attention aux références/pointeurs
SQL> CREATE OR REPLACE TYPE...
Table objet-relationnelle
•  Création des types utilisés (à partir d’un
autre type)

SQL> CREATE OR REPLACE TYPE Lieux_int...
Table objet-relationnelle
•  Création des types utilisés
SQL> CREATE OR REPLACE TYPE employe_type As OBJECT (!
!numero
!
!...
Table objet-relationnelle
•  Création de la table OR

SQL> CREATE TABLE Employes OF employe_type!
!(CONSTRAINT PK_employe ...
Le script SQL OR
Employe
NumEmp

dept

sal

@veh

ADR
NOR UE

Lieux Interventions

RUE

VILLE

CODE_POSTAL

…

…

…

…

…
...
Le script SQL OR
SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT!
!(no_immat !VARCHAR2 (8),!
!date_immat !DATE,!
!type_v
!VA...
Le script SQL OR
Employe
NumEmp

dept

sal

@veh

ADR
NOR UE

Lieux Interventions

RUE

VILLE

CODE_POSTAL

…

…

…

…

…
...
A vous
•  Table!OR!
Departement
numdep

Secrétaires

budget
Nemp

D3

325000

D4

10/12/13
Page 45

125000

N1

28

Zidane...
Insertion des tuples
•  Dans une table OR avec un attribut
défini avec un TAD

SQL> INSERT INTO Nom_Table !
!
!VALUES ( V1...
Insertion des tuples
•  Dans une table OR avec un attribut
défini avec un TAD
–  Exemple
SQL> insert into contrats values(...
Insertion des tuples
•  Dans une table OR avec un attribut
défini avec un TAD
–  Exemple
SQL> insert into vehicules
values...
Insertion des tuples
•  Dans une table OR contenant un
pointeur
Employe
NumEmp

dept

sal

@veh

SQL> INSERT INTO Employes...
Insertion des tuples
•  Dans une table OR contenant une table
imbriquée
–  Syntaxe
-- Initialisation de la table imbriquée...
Insertion des tuples
•  Dans une table OR contenant une table
imbriquée
–  Exemple
SQL> INSERT INTO Employes
select 1, ’Si...
Insertion des tuples
•  Dans une table OR contenant une table
imbriquée
–  Exemple
SQL> INSERT INTO Employes
select 1, ’Si...
Insertion des tuples
•  Dans une table imbriquée contenant un
pointeur
–  Syntaxe
SQL> INSERT INTO
THE (SELECT t.Tab_Imb
F...
Insertion des tuples
•  Dans une table imbriquée contenant un
pointeur
–  Exemple nécessitant l’insertion dans la
table pr...
Insertion des tuples
•  Dans une table imbriquée contenant un
pointeur
–  Exemple ne nécessitant pas l’insertion dans
la t...
Mise à jour des tuples
•  Dans une table principale
–  Syntaxe
SQL> UPDATE Nom_de_table Alias
SET
Alias.Nom_Attribut1 = ex...
Mise à jour des tuples
•  Dans une table principale
–  Exemple

SQL> UPDATE Employes e
SET e.Nom='Nicolle', e.Prenom='Chri...
Mise à jour des tuples
•  Dans une table imbriquée
–  Syntaxe
SQL>

10/12/13
Page 58

UPDATE THE
(SELECT Nom_Alias1.Table_...
Mise à jour des tuples
•  Dans une table imbriquée
–  Exemple
•  Modifier la distance d intervention à 8888 de
l employé 1...
Mise à jour des tuples
•  Dans une table imbriquée
–  Exemple
•  Pour l’employé 2, changer son intervention
associée à la ...
Suppression des tuples
•  Syntaxe générale

SQL>

10/12/13
Page 61

DELETE FROM Nom_table Alias
WHERE Alias.Nom_attribut =...
Suppression des tuples
•  Condition de suppression portant sur
une table imbriquée
–  Exemple
•  Supprimer les employés qu...
Suppression des tuples
•  Condition de suppression portant sur les
n-uplets d’une table imbriquée
–  Exemple
•  Supprimer ...
Departement
Donner&le&script&SQL&perme1ant&&
d’insérer&le&tuple&D3,&de&rajouter&
le&secrétaire&N4&à&D3,&et&de&
supprimer&N...
Interrogation des tuples
•  Syntaxe générale
SQL>

SELECT

t.Nom_attr1, t.Nom_ attr2, , ….

FROM Table t;

Utilisation d'u...
Interrogation des tuples
•  Exemple
–  Donnez le numéro, le nom et le prénom des
employés qui ont un véhicule mis en
circu...
Interrogation des tuples
•  Exemple
–  Donnez le nom des villes où intervient
l’employé numéro 2

SELECT la.ville
FROM THE...
Interrogation des tuples
•  Exemple
–  Donnez le nom des villes où intervient tous
les employés
SQL>

10/12/13
Page 68

SE...
Interrogation des tuples
•  Exemple
–  Donnez les numéros et les montants des
contrats de l’employé numéro 1
SQL>

10/12/1...
Interrogation des tuples
•  Exemple
–  Afficher les informations relatives aux
contrats de l’employé numéro « 1 »
SQL>

SE...
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN)
–  Syntaxe
SQL>

10/12/13
Pag...
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN)
–  Exemple
•  Afficher le nom...
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN) sur
une table imbriquée
–  Sy...
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN) sur
une table imbriquée
–  Ex...
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN) sur
une table imbriquée
–  Ex...
Interrogation des tuples
•  Utilisation des curseurs
–  Syntaxe
SQL> SELECT alias. att, CURSOR ( SELECT ti.att2, ti.att2
F...
Interrogation des tuples
•  Utilisation des curseurs
–  Exemple
•  Donnez les employés (nom et prénom) et les
villes respe...
Interrogation des tuples
•  Utilisation des curseurs
–  Exemple
•  Donnez les employés (nom et prénom) et les
contrats res...
Heritage
•  Pour utiliser des sous-types dans SQL3,
il faut définir des types non finaux
–  Exemple
SQL> CREATE or replace...
Heritage
•  Pour utiliser des sous-types dans SQL3,
il faut définir des types non finaux
–  Exemple
SQL> CREATE TABLE etud...
Heritage
•  Insertion
–  Exemple
SQL> INSERT INTO etudiants_IUT VALUES
('12345555',22,'Almamy','12/12/2005','1','IQ2');

1...
Méthodes
• 

Vous pouvez associer à chaque type
un ensemble de méthodes ou fonctions
–  Deux étapes sont à suivre
1.  Lors...
Méthodes
• 

Vous pouvez associer à chaque type
un ensemble de méthodes ou fonctions
–  Deux étapes sont à suivre
2.  Spéc...
Conclusions!

10/12/13
Page 84
Prochain SlideShare
Chargement dans…5
×

Sql3

2 045 vues

Publié le

1 commentaire
2 j’aime
Statistiques
Remarques
  • C'est tré intéressant dommage en peu pas le télécharger
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
Aucun téléchargement
Vues
Nombre de vues
2 045
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1
Actions
Partages
0
Téléchargements
0
Commentaires
1
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Sql3

  1. 1. (" LABORATOIRE D’INFORMATIQUE DE L’UNIVERSITE DE PAU ET DES PAYS DE L’ADOUR BDD Avancées SQL3 Richard Chbeir, Ph.D.
  2. 2. Plan! Encapsulation des objets Interrogation des objets Manipulation des objets Introduction" 10/12/13 Page 2 •  Fonctions et procédures
  3. 3. Pourquoi ? Employe NumEmp dept salaire ADR … … … … … … … … Approche relationnelle 10/12/13 Page 3
  4. 4. Pourquoi ? Employe NumEmp dept salaire ADR … … … … … … … … Employe NumEmp dept salaire ADR NOR UE VILLE CODE_POSTAL … … … … … 10/12/13 Page 4 RUE … … … Approche avancée
  5. 5. Comment faire? Définition d’un nouveau Type Abstrait de Données ou TAD 10/12/13 Page 5
  6. 6. Introduction •  TAD –  Une structure de données partagée –  Inclut des méthodes qui sont des procédures ou des fonctions permettant de manipuler les objets ou instances du type abstrait –  Ne peut pas contenir de contraintes (NOT NULL, CHECK, …) 10/12/13 Page 6
  7. 7. Introduction •  Autres types de TAD –  Large Object Bloc (LOB) •  Binary LOB (BLOB) : stockage des données binaires non structurées (4Go) •  Character LOB (CLOB) : stockage de données caractères (4Go) •  Binary FILE (BFILE) : fichiers binaires localisés à l extérieur de la BDD 10/12/13 Page 7
  8. 8. Introduction •  Usage des TAD –  Dans une table –  Dans un attribut d’une table relationnelle –  Etc. 10/12/13 Page 8
  9. 9. Introduction •  Création d’un TAD –  Syntaxe SQL> CREATE OR REPLACE TYPE Nom_Type ! ! !AS OBJECT (! ! ! !Nom_attribut1 !Type_Attribut,! ! ! !Nom_attribut2 !Type_Attribut,! ! ! !……..! ! ! !Nom_attributn !Type_Attribut ! [final|not final]! ! ! !)! ; /! 10/12/13 Page 9
  10. 10. Introduction •  Création d’un TAD –  Exemple SQL> CREATE OR REPLACE TYPE adresse_type ! !AS OBJECT (! ! !norue NUMBER, ! ! !rue VARCHAR(20), ! ! !ville VARCHAR2(30), ! ! !code_postal VARCHAR2(10)) ! /! ADRESSE_TYPE NORUE 10/12/13 Page 10 RUE VILLE CODE_POSTAL
  11. 11. Introduction •  Création d’un TAD –  Type utilisé par un attribut d’une table relationnelle •  Exemple SQL> CREATE TABLE employe (! !norue NUMBER PRIMARY KEY,! !dept VARCHAR2(10),! !sal NUMBER, ! !adr adresse_type);! Employe NumEmp dept sal ADR NOR UE VILLE CODE_POSTAL … … … … … 10/12/13 Page 11 RUE … … … Une table contient un TAD est une table relationnelle-objet
  12. 12. Introduction •  Manipulation des TAD –  Insertion des tuples •  Exemple (insérer les informations de l’employé numéro 1 dans la table Employé) SQL> INSERT INTO Employe( 1, 'Informatique', 2000, adresse_type(98,'Faubourg Raines',’Lyon',’69000’) ) ; 10/12/13 Page 12
  13. 13. Introduction •  Manipulation des TAD –  Modification des tuples •  Exemple (modifier le salaire et le numéro de la rue de l’employé lyonnais qui porte le numéro 1) SQL> UPDATE Employe e SET e.sal= 200, e.adr.rue=’130' WHERE e.adr.ville LIKE '%Ly%' and e.numero='1'; Utilisation d’alias obligatoire lors de la manipulation 10/12/13 Page 13
  14. 14. Introduction •  Manipulation des TAD –  Interrogation des tuples •  Exemple (trouver tous les employés lyonnais) SQL> 10/12/13 Page 14 SELECT e.numero FROM employes e WHERE e.adr.ville LIKE '%Ly%’;
  15. 15. Introduction •  Manipulation des TAD –  Suppression des tuples •  Exemple (supprimer(le(tuple(de(l’employé(dont( l’adresse(est(130(Ray(Lyon(6) SQL> 10/12/13 Page 15 DELETE FROM employes e WHERE e.adr = adresse_type(130,’Ray',’Lyon',’6’);
  16. 16. Donner&le&script&SQL& perme1ant&de&créer& ce1e&table& rela6onnelle7objet?! Numdep Secrétaire Budget nemp age nom D2 N1 28 Zidane D3 325000 N2 26 Thuram D4 10/12/13 Page 16 253000 125000 N5 26 Dessailly
  17. 17. Donner&le&script&SQL& perme1ant&& d’insérer&les&tuples& suivants&?! numdep Secrétaires budget Nemp D3 325000 D4 10/12/13 Page 17 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 253000 nom N5 D2 age 32 Deschamps
  18. 18. Problème!lié!à!la!table!imbriquée! numdep Secrétaires budget Nemp D3 325000 D3 10/12/13 Page 18 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 253000 nom N5 D2 age 32 Deschamps
  19. 19. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer!le!type!SecretaireOtype)! SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT! ! !(! ! !Nemp !VARCHAR2(3),! ! !Age !NUMBER,! ! !Nom !VARCHAR2(15))! /! Secretaire5type Nemp 10/12/13 Page 19 age nom
  20. 20. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer!le!type!SecretaireSOtype)! SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT! ! !(! ! !Nemp !VARCHAR2(3),! ! !Age !NUMBER,! ! !Nom !VARCHAR2(15))! /! SQL> CREATE OR REPLACE TYPE SecretaireS_Type! !AS TABLE OF Secretaire-Type ! / ! SecretaireS_Type" Nemp 10/12/13 Page 20 age Nom
  21. 21. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer(la(table(Département)! SQL> CREATE TABLE Departement ( numdep VARCHAR2(5) PRIMARY KEY, budget NUMBER, secrétaires SecretaireS_Type ) NESTED TABLE secrétaires STORE AS tabsec; numdep Secrétaires budget Nemp 10/12/13 Page 21 D4 325000 125000 nom N2 26 Thuram N3 30 Barthez N5 D3 age 26 Dessailly N6 24 Lizarazu N7 32 Deschamps
  22. 22. Introduction •  Manipulation des TAD –  Insertion des tuples dans une table imbriquée •  Exemple (insérer toutes les informations du département D3) SQL> INSERT INTO Departement VALUES ( ‘D3’, 325000, SecretaireS-Type(Secretaire-Type(‘N2’,26,’Thuram’), Secretaire-Type(‘N3’,30,’Barthez’) ) ) ; numdep Secrétaires budget Nemp 10/12/13 Page 22 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  23. 23. Introduction •  Manipulation des TAD –  Modification des tuples dans une table imbriquée •  Exemple (modifier l’âge de tous les secrétaires du département D3 dont le nom commence par la lettre B) SQL> UPDATE THE (SELECT e.Secrétaires FROM Departement e WHERE e.numdep=’D3') a SET a.age = 38 WHERE a.nom LIKE ‘B%'; numdep Secrétaires budget Nemp 10/12/13 Page 23 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  24. 24. Introduction •  Manipulation des TAD –  Interrogation des tuples dans une table imbriquée •  Exemple (trouver l'âge des secrétaires du département D3) SELECT la.age FROM THE (SELECT e.Secrétaires FROM Departement e WHERE e.numdep=’D3') la; SQL> numdep Secrétaires budget Nemp 10/12/13 Page 24 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  25. 25. Introduction •  Manipulation des TAD –  Interrogation des tuples dans une table imbriquée •  Exemple (trouver les secrétaires de chaque département) SQL> SELECT D.numdep, S.* FROM Departement D, TABLE (D.Secrétaires) S; numdep Secrétaires budget Nemp 10/12/13 Page 25 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  26. 26. Introduction •  Manipulation des TAD –  Suppression des tuples dans une table imbriquée •  Exemple (supprimer les tuples des secrétaires du département D3 ayant plus de 30 ans) SQL> DELETE FROM the (SELECT e.Secrétaires FROM Departement e WHERE e.numero=’D3') li WHERE li.age >= 30 ; numdep Secrétaires budget Nemp 10/12/13 Page 26 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  27. 27. Donner&le&script&SQL& perme1ant&&de&créer& la&table&suivante&?! Employe NEmp dept Lieux Interventions ADR sal N° VILLE CODE_POSTAL … … … … … 10/12/13 Page 27 RUE … … … Ville Distance
  28. 28. Et si avait le schéma suivant ? Véhicule Employe NumEmp dept salaire ADR N°Véhicule Num Type Marque Date … … … … .. … … … … … … … … … … … … … Contrat NumEmp Montant … … … 10/12/13 Page 28 N°Int … Intervention Poss. Date N° Ville Distance … … … … … … … … Approche relationnelle
  29. 29. Comment le transformer en … Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … Ville … Véhicule Distance Contrat Num Type Marque Date N°Int Montant … … … … … … … 10/12/13 Page 29 @contrat … … … … … Approche objet-relationnelle Date
  30. 30. Table objet-relationnelle •  Définition –  Une table est dite objet-relationnelle quand elle dépend d un TAD Les enregistrements d une table OR peuvent être considérés comme des objets car ils possèdent tous un Object ID (OID) 10/12/13 Page 30
  31. 31. Table objet-relationnelle •  Pseudo-colonnes –  ROWID •  Désigne une pseudo-colonne qui contient l adresse physique de chaque enregistrement d une base de données Oracle –  OID •  Dans Oracle, chaque objet (table, type, objets des tables, …) a un identificateur unique (OID) sur 16 positions –  REF •  Chaque objet, au sens Oracle du terme, possède un OID via une pseudo-colonne de type REF. Chaque REF est composé d une partie de l OID, des informations de la table objet-relationnelle et éventuellement du ROWID. 10/12/13 Page 31
  32. 32. Table objet-relationnelle •  Pour créer une table Objet-relationnelle ayant une structure d un type préalablement défini SQL> CREATE TABLE Nom_table OF Nom_Type ! ! ![(Contraintes_d_integrite)]! ;! 10/12/13 Page 32
  33. 33. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT! ! !(no_int ! !VARCHAR2 (8),! ! !date_int !DATE,! ! !Montant ! !NUMBER)! /! contrat_typ No_int 10/12/13 Page 33 Date_int Montant
  34. 34. Table objet-relationnelle •  Création de la table SQL> CREATE TABLE Contrats OF contrat_typ! (CONSTRAINT PK_con PRIMARY KEY(no_int))! ;! 10/12/13 Page 34
  35. 35. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT! ! !(no_immat !VARCHAR2 (8),! ! !date_immat !DATE,! ! !type_v !VARCHAR2(7),! ! !marque !VARCHAR2(15))! /! veh_typ No_immat 10/12/13 Page 35 Date_immat Type_v marque
  36. 36. Table objet-relationnelle •  Création de la table SQL> CREATE TABLE Vehicules OF veh_typ! (CONSTRAINT PK_veh PRIMARY KEY(no_immat))! ;! 10/12/13 Page 36
  37. 37. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE adresse_type ! !AS OBJECT (! ! !norue NUMBER, ! ! !rue VARCHAR(20), ! ! !ville VARCHAR2(30), ! ! !code_postal VARCHAR2(10)) ! /! ADRESSE_TYPE NORUE 10/12/13 Page 37 RUE VILLE CODE_POSTAL
  38. 38. Table objet-relationnelle •  Création des types utilisés –  Attention aux références/pointeurs SQL> CREATE OR REPLACE TYPE Lieu_intervention AS OBJECT! ! !(! ! !ref_contrat !REF contrat_typ,! ! !Ville ! !VARCHAR2(15),! ! !Distance !NUMBER)! /! Lieu_intervention ref_contrat 10/12/13 Page 38 Ville Distance
  39. 39. Table objet-relationnelle •  Création des types utilisés (à partir d’un autre type) SQL> CREATE OR REPLACE TYPE Lieux_intervention! !AS TABLE OF lieu_intervention! / ! 10/12/13 Page 39
  40. 40. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE employe_type As OBJECT (! !numero ! !VARCHAR2(5),! !nom ! !VARCHAR2(15),! !prenom ! !VARCHAR2(15),! !dept ! !VARCHAR2(20),! !veh !REF !veh_typ,! !ADR !adresse_type,! !lieux_interventions!lieux_intervention)! / ! 10/12/13 Page 40
  41. 41. Table objet-relationnelle •  Création de la table OR SQL> CREATE TABLE Employes OF employe_type! !(CONSTRAINT PK_employe PRIMARY KEY(numero))! !NESTED TABLE lieux_interventions STORE AS tab_int! ;! 10/12/13 Page 41
  42. 42. Le script SQL OR Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … Ville … Véhicule Distance Contrat Num Type Marque Date N°Int Montant … … … … … … … 10/12/13 Page 42 @contrat … … … … … Date
  43. 43. Le script SQL OR SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT! !(no_immat !VARCHAR2 (8),! !date_immat !DATE,! !type_v !VARCHAR2(7),! !marque !VARCHAR2(15))! /! SQL> CREATE TABLE Vehicules OF veh_typ! (CONSTRAINT PK_veh PRIMARY KEY(no_immat))! ;! Véhicule Num Type Marque Date … … … … … … … … SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT! !(no_int !VARCHAR2 (8),! !date_int !DATE,! !Montant !NUMBER)! /! SQL> CREATE TABLE Contrats OF contrat_typ! (CONSTRAINT PK_con PRIMARY KEY(no_int))! ;! Contrat N°Int … 10/12/13 Page 43 Montant … … … Date
  44. 44. Le script SQL OR Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … … CREATE or replace TYPE adresse_type norue NUMBER, rue VARCHAR(20), ville VARCHAR2(30), @contrat / CREATE OR REPLACE TYPE employe_type As OBJECT ( numero AS OBJECT( NUMBER) REF ADR VARCHAR2(15), Distance VARCHAR2(20), veh ref_contrat REF contrat_typ, Ville VARCHAR2(15), dept CREATE OR REPLACE TYPE Lieu_intervention VARCHAR2(15), prenom / VARCHAR2(5), nom code_postal VARCHAR2(10)) 10/12/13 Page 44 Distance CREATE or REPLACE TYPE Lieux_intervention as Table of lieu_intervention AS OBJECT ( / Ville adresse_type, lieux_interventions veh_typ, lieux_intervention) / CREATE TABLE Employes OF employe_type (CONSTRAINT PK_employe PRIMARY KEY(numero)) NESTED TABLE lieux_interventions STORE AS tab_int;
  45. 45. A vous •  Table!OR! Departement numdep Secrétaires budget Nemp D3 325000 D4 10/12/13 Page 45 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 253000 nom N5 D2 age 32 Deschamps
  46. 46. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD SQL> INSERT INTO Nom_Table ! ! !VALUES ( V1, V2, ….., Nom_Type( ! ! !val1, val2, ….) ! ! !); ! Constructeur 10/12/13 Page 46
  47. 47. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD –  Exemple SQL> insert into contrats values('1','12/12/2006',500); SQL> insert into contrats values( contrat_typ( 1','12/12/2006',500) ); Contrat N°Int … 10/12/13 Page 47 Montant … … … Date
  48. 48. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD –  Exemple SQL> insert into vehicules values( veh_typ( 2', BMW , X5 ,'12/12/2006') ); Véhicule Num Marque Date … … … … … 10/12/13 Page 48 Type … … …
  49. 49. Insertion des tuples •  Dans une table OR contenant un pointeur Employe NumEmp dept sal @veh SQL> INSERT INTO Employes … select 1,'Informatique', 2000, ref(a) from vehicules a where a.no_immat='2' … ; Véhicule Num Marque Date … … … … … 10/12/13 Page 49 Type … … …
  50. 50. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Syntaxe -- Initialisation de la table imbriquée à vide ! SQL> INSERT INTO Nom_Table VALUES ( V1, V2, ….., Ens_Nom_Type() ); -- Avec insertion de n-uplets dans la table imbriquée 10/12/13 Page 50 SQL> INSERT INTO Nom_Table VALUES ( V1, V2, ….., Ens_Nom_Type( Nom_type1 ( …….), Nom_type1 ( …….), Nom_type1 ( …….) ) );
  51. 51. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Exemple SQL> INSERT INTO Employes select 1, ’Simone', ’Dijon','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention() from vehicules a where a.no_immat='2' ; 10/12/13 Page 51
  52. 52. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Exemple SQL> INSERT INTO Employes select 1, ’Simone', ’Dijon','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention() SQL> INSERT vehicules a where a.no_immat='2' from INTO Employes select 2, ’Marqua', ’Xtophe','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), ; Lieux_Intervention(Lieu_intervention(null,'Dijon',500)) from vehicules a where a.no_immat='2' ; 10/12/13 Page 52
  53. 53. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Syntaxe SQL> INSERT INTO THE (SELECT t.Tab_Imb FROM Nom_table t WHERE t.Attr_i = Valeur) SELECT V1, V2, ,REF(n)FROM Table_R n WHERE n.Attr_j = Valeur ; 10/12/13 Page 53
  54. 54. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Exemple nécessitant l’insertion dans la table principale SQL> INSERT INTO Employes select 3, ’Xavier', ’Dupont','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention(Lieu_intervention(null,'Dijon',500), Lieu_intervention(ref(v),'Lyon',600) ) from vehicules a, contrats v where v.no_int='2' and a.no_immat='2' ; 10/12/13 Page 54
  55. 55. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Exemple ne nécessitant pas l’insertion dans la table principale SQL> INSERT INTO the (select e.Lieux_interventions from Employes e where e.numero='3') select ref(v), Paris',800 from contrats v where v.no_int='1' ; 10/12/13 Page 55
  56. 56. Mise à jour des tuples •  Dans une table principale –  Syntaxe SQL> UPDATE Nom_de_table Alias SET Alias.Nom_Attribut1 = expression1 Alias.Nom_Attribut2 = expression2 ……. [WHERE Condition ] ; 10/12/13 Page 56
  57. 57. Mise à jour des tuples •  Dans une table principale –  Exemple SQL> UPDATE Employes e SET e.Nom='Nicolle', e.Prenom='Christophe' WHERE e.adr.ville LIKE '%Dijon%' and e.numero='1'; 10/12/13 Page 57
  58. 58. Mise à jour des tuples •  Dans une table imbriquée –  Syntaxe SQL> 10/12/13 Page 58 UPDATE THE (SELECT Nom_Alias1.Table_imbriquée FROM Table Nom_Alias1 WHERE Condition ) Nom_alias2 SET Nom_alias2.Attribut = expression WHERE Condition ;
  59. 59. Mise à jour des tuples •  Dans une table imbriquée –  Exemple •  Modifier la distance d intervention à 8888 de l employé 1 dans la ville de Dijon SQL> UPDATE THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero='1') a SET a.distance = 8888 WHERE a.ville LIKE '%Dijon%'; 10/12/13 Page 59
  60. 60. Mise à jour des tuples •  Dans une table imbriquée –  Exemple •  Pour l’employé 2, changer son intervention associée à la ville de Dijon, la nouvelle référence ayant pour numéro T1234 SQL> UPDATE THE ( SELECT e.lieux_interventions FROM Employes e WHERE e.numero='2') a SET a.ref_contrat = (select ref(v) from contrats v where v.No_int ='T1234') WHERE a.ville LIKE '%Dijon% ; 10/12/13 Page 60
  61. 61. Suppression des tuples •  Syntaxe générale SQL> 10/12/13 Page 61 DELETE FROM Nom_table Alias WHERE Alias.Nom_attribut = Expression ;
  62. 62. Suppression des tuples •  Condition de suppression portant sur une table imbriquée –  Exemple •  Supprimer les employés qui ont eu des interventions à Lyon SQL> DELETE FROM Employes e WHERE EXISTS(select * from the (SELECT a.lieux_interventions FROM employes a WHERE a.numero=e.numero) li WHERE li.ville = Lyon') ; 10/12/13 Page 62
  63. 63. Suppression des tuples •  Condition de suppression portant sur les n-uplets d’une table imbriquée –  Exemple •  Supprimer les interventions de l’employé 2 qui se sont déroulées à Lyon SQL> DELETE FROM the (SELECT e.lieux_interventions FROM employes e WHERE e.numero='2') li WHERE li.ville LIKE '%Lyon% ; 10/12/13 Page 63
  64. 64. Departement Donner&le&script&SQL&perme1ant&& d’insérer&le&tuple&D3,&de&rajouter& le&secrétaire&N4&à&D3,&et&de& supprimer&N2?! numdep Secrétaires budget Nemp D4 10/12/13 Page 64 325000 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 D3 253000 nom N5 D2 age 32 Deschamps
  65. 65. Interrogation des tuples •  Syntaxe générale SQL> SELECT t.Nom_attr1, t.Nom_ attr2, , …. FROM Table t; Utilisation d'un alias obligatoire pour les attributs structurés 10/12/13 Page 65
  66. 66. Interrogation des tuples •  Exemple –  Donnez le numéro, le nom et le prénom des employés qui ont un véhicule mis en circulation après le 01/06/2006 SQL> 10/12/13 Page 66 SELECT e.numero, e.nom, e.prenom FROM employes e WHERE e.VEH.date_immat>='01/12/2006';
  67. 67. Interrogation des tuples •  Exemple –  Donnez le nom des villes où intervient l’employé numéro 2 SELECT la.ville FROM THE (SELECT e.lieux_interventions FROM employes e WHERE e.numero='2') la; SQL> 10/12/13 Page 67
  68. 68. Interrogation des tuples •  Exemple –  Donnez le nom des villes où intervient tous les employés SQL> 10/12/13 Page 68 SELECT la.ville FROM employes e, TABLE(e.lieux_interventions) la;
  69. 69. Interrogation des tuples •  Exemple –  Donnez les numéros et les montants des contrats de l’employé numéro 1 SQL> 10/12/13 Page 69 SELECT le.ref_contrat.no_int, le.ref_contrat.montant FROM THE(SELECT e.lieux_interventions FROM employes e WHERE e.numero='1') le;
  70. 70. Interrogation des tuples •  Exemple –  Afficher les informations relatives aux contrats de l’employé numéro « 1 » SQL> SELECT (Li.ref_contrat) FROM THE (SELECT Emp.lieux_interventions FROM Employes Emp WHERE Emp.numero = '1') Li; 000022020876B2245DBE325C5FE03400400B40DCB176B2245DBE305C5FE034 00400B40DCB1 SQL> 10/12/13 Page 70 SELECT DEREF (Li.ref_contrat) FROM THE (SELECT Emp.lieux_interventions FROM Employes Emp WHERE Emp.numero = '1') Li;
  71. 71. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) –  Syntaxe SQL> 10/12/13 Page 71 SELECT Nom_de_fonction ( paramètres )! !FROM Nom_de_relation! ![WHERE condition1]! ![GROUP BY condition2 [HAVING condition3]]!
  72. 72. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) –  Exemple •  Afficher le nombre des employés qui habitent Dijon SQL> 10/12/13 Page 72 SELECT count(*) FROM Employes Emp WHERE emp.adr.ville = 'Dijon';
  73. 73. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Syntaxe SQL> SELECT Nom_de_fonction ( paramètres ) FROM THE (SELECT alias.tab_imb FROM Table alias WHERE alias.nom_attribut = valeur ); 10/12/13 Page 73
  74. 74. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Exemple •  Donnez le nombre de contrats de l’employé numéro 1 SQL> SELECT count (*) FROM THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero = 1); 10/12/13 Page 74
  75. 75. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Exemple •  Donnez le nombre de contrats dans la ville de Dijon pour l’employé numéro « 1 » SQL> SELECT count (*) FROM THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero = 1) li where li.ville='Dijon'; 10/12/13 Page 75
  76. 76. Interrogation des tuples •  Utilisation des curseurs –  Syntaxe SQL> SELECT alias. att, CURSOR ( SELECT ti.att2, ti.att2 FROM TABLE (Tab_Imb) ti) FROM table alias WHERE condition; 10/12/13 Page 76
  77. 77. Interrogation des tuples •  Utilisation des curseurs –  Exemple •  Donnez les employés (nom et prénom) et les villes respectives SQL> SELECT Emp.numero, Emp.nom, Emp.prenom, CURSOR (SELECT Li.ville FROM TABLE(lieux_interventions) Li) FROM employes Emp; 10/12/13 Page 77
  78. 78. Interrogation des tuples •  Utilisation des curseurs –  Exemple •  Donnez les employés (nom et prénom) et les contrats respectifs SQL> SELECT e.numero, e.nom, e.prenom, CURSOR (SELECT CURSOR (SELECT * FROM contrats p) FROM TABLE(e.lieux_interventions) d) FROM Employes e; 10/12/13 Page 78
  79. 79. Heritage •  Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux –  Exemple SQL> CREATE or replace TYPE etudiant_type AS OBJECT (no_insee VARCHAR2(13), age NUMBER, nom VARCHAR2(30)) not final; / CREATE or replace TYPE etudiant_IUT UNDER etudiant_type (date_inscription DATE, situa_fam CHAR(1), annee varchar2(4)) final;/ 10/12/13 Page 79
  80. 80. Heritage •  Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux –  Exemple SQL> CREATE TABLE etudiants_IUT of etudiant_IUT ; 10/12/13 Page 80
  81. 81. Heritage •  Insertion –  Exemple SQL> INSERT INTO etudiants_IUT VALUES ('12345555',22,'Almamy','12/12/2005','1','IQ2'); 10/12/13 Page 81
  82. 82. Méthodes •  Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions –  Deux étapes sont à suivre 1.  Lors de déclaration de la fonction (Create ou ALTER) SQL> CREATE OR REPLACE TYPE Nom_Type ! ! !AS OBJECT (! ! ! !Nom_attribut1 !Type_Attribut,! ! ! !Nom_attribut2 !Type_Attribut,! ! ! !……..! ! ! !Nom_attributn !Type_Attribut ! [final|not final]! MEMBER FUNCTION nom_fonction1 RETURN type_données! MEMBER FUNCTION nom_fonction2 RETURN type_données! );! /! 10/12/13 Page 82
  83. 83. Méthodes •  Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions –  Deux étapes sont à suivre 2.  Spécification du corps de la fonction SQL> CREATE TYPE BODY Nom_Type AS MEMBER FUNCTION nom_fonction1() IS BEGIN END nom_fonction1() ; MEMBER FUNCTION nom_fonction2() IS BEGIN END nom_fonction2() ; … END; / 10/12/13 Page 83
  84. 84. Conclusions! 10/12/13 Page 84

×