SlideShare une entreprise Scribd logo
Réponses
Etape 1 :
Le modèle navigationnel GPC du diagramme de classe est le suivant :
ClientPromo
matC* : int
nomC : varchar
adrC : varchar
lesChantiers
lesAssocies
Associe
noAs
nomAs
capital
<<Projet>>
noP* : int
livraisonP :Date
SiteChantier
noSC* : int
villeSC : varchar
leChefDirige
leChefSuper
Chef
nas*:int
anServ : int
Usine
Proprio
noU* : int leClient
villeU : varchar leProjet
ChargeProjet
nasCP* : varchar
refPC
refUs
totalBudgetP : real
margeP : real
(c,d)
ProjetCourant
stDepensePC : real
cumulPayePC : real
margeDispPC : real
refCB
CompteBanque
noCB* : int
soldeCB : real
dateOuvCB : Date
dateFinCB : Date
ProjetTermine
totalDepensesPT : real
Etape 2
Supervision et direction de chantier (une partie du diagramme de classe)
Voici le diagramme de classe UML de départ :
Dirige >SiteChantier Chef
0..1 1
noSC* : int
nas* :int
villeSC : varchar
0..10..3 anServ : int
Supervise >
ChangerChef()
Le modèle navigationnel partiel correspondant est le suivant :
SiteChantier
noSC* : int
villeSC : varchar
leChefDirige
leChefSuper
Chef
nas* :int
anServ : int
ChangerChef()
Questions :
2.1
Create type Chef_t as Object(
nas int,
anServ int )
/
Create type SiteChantier_t as Object(
noSC int,
villeSC varchar2(50),
leChefDirige REF chef_t,
leChefSuper REF chef_t ) /
2.2
Les contraintes se définissent que sur les tables.
Create table Chef of chef_t (
Constraint pk_nas Primary Key (nas),
Constraint c_nas check(nas>80 AND nasC<99),
Constraint c1_nas check (nas IS NOT NULL) )
Create table SiteChantier of siteChantier_t (
Constraint pk_noSC Primary Key (noSC),
Constraint c1_noSC check (noSC>100 AND noSC<999),
Constraint c2_noSC check (noSC IS NOT NULL)
);
Un attribut de référence doit être non null et tandis que l’autre peut-être null.
Alter table SiteChantier add Constraint c3_leChefDirige Check( leChefDirige IS NOT NULL) ;
2.3
insert into Chef values(chef_t(80,10));
insert into Chef values(chef_t(84,15));
insert into Chef values(chef_t(85,17));
insert into Chef values(chef_t(81,11));
insert into Chef values(chef_t(83,11));
Insert into SiteChantier values(SiteChantier_t(200,'Québec', (select REF(x) From Chef x where
x.nas =80), (select REF(x) From Chef x where x.nas = 80)));
Insert into SiteChantier values(SiteChantier_t(206,'Monaco',(select REF(x) From Chef x where
x.nasC=81), (select REF(x) From Chef x where x.nasC=80)));
Insert into SiteChantier values(SiteChantier_t(207,'Rome',(select REF(x) From Chef x where
x.nas=84), (select REF(x) From Chef x where x.nas =84)));
Insert into SiteChantier values(SiteChantier_t(208,'Paris',(select REF(x) From Chef x where
x.nas=83), (select REF(x) From Chef x where x.nas =85)));
2. 4
Pour y arriver, il faut utiliser l’oid du chef dont le nas est connu. Cet oid sera comparé avec l’oid de
la référence leChefDirige de la table SiteChantier.
Etape 3
Le modèle navigationnel partiel correspondant est le suivant :
Le modèle navigationnel comprend un lien interne multiple et son interface composée de signatures.
modifClient() : méthode pour modifier le nom d’un client.
augmente10Capital() : méthode pour augmenter de 10% le capital d’un associé. Cette méthode devra
être appelée par un objet-colonne.
Questions :
3.1
Comme le stipule le scénario, lorsqu’un Client-promoteur cesse ses activités alors le lien avec ses
associes disparaît automatiquement. En implantant la composition avec une classe interne, en
supprimant un objet Client-Promoteur, ses associés sont aussi supprimés sans autres opérations.
3.2
Create or replace Type associe_t as Object (noAs int, nomAs varchar2(30), capit int)
/
Create OR Replace Type lesAssocies_t AS TABLE OF associe_t
/
Create Type clientPromo_t as Object (matC int, nomC varchar2(30), adrC varchar2(30),
lesAssocies lesAssocies_t)
/
La contrainte se définit au niveau de la table, et ici au niveau de la table imbriquée, APRES la
création de la table contenante.
Create Table ClientPromo of clientPromo_t (
Constraint pk_clientPromo Primary Key (matC),
Constraint c_matC Check (matC >=10000 AND matC <=10500))
NESTED TABLE lesAssocies STORE AS TablelesAssocies;
Les contraintes sur les attributs de l’objet-colonne ou de la table imbriquée s’appliquent sur la
table physique créée pour stocker les objets de la table imbriquée.
Dans ce cas-ci la table physique est connue car elle a été nommée par la création de la table
principale : TablelesAssocies
Alter Table TablelesAssocies ADD Constraint c1_noAs Check(noAs>=5000 AND noAs<=6000) ;
Alter Table TablelesAssocies ADD Constraint c2_capit Check(capit <=1000000) ;
3.3
Alter type clientPromo_t ADD Member Procedure modifNomClient Cascade ;
Alter type clientPromo_t ADD Member Procedure augmente10Capital () Cascade ;
3.4
Create OR Replace Type Body ClientPromo_t AS
MEMBER Procedure modifNomClient
IS
clientP clientPromo_t ;
BEGIN
/* Select value(cp) into clientP from ClientPromo Where matC = self.matC ;
clientP.nomC := self.nomC ; */
Update ClientPromo cp set cp.nomC = self.nomC Where cp.matC = self.matC ;
end;
/
3.5
Insert into ClientPromo values (clientPromo_t(10034, 'Etienne','Ste-Foy', lesAssocies_t (
associe_t (5002,'Kerris', 110000),
associe_t(5003,'Ana', 120000),
associe_t(5003,'Pierre', 830000)
)));
Etape 4
Questions :
4.1
La classe abstraite <<Projet>> permet l’héritage des attributs et des signatures. Elle ne peut pas
être instanciée (NOT INSTANTIABLE) mais elle est spécialisée (NOT FINAL). Il ne pourra donc pas
y avoir d’objet du type projet_t.
Pour valider le disjoint, il faut vérifier que tout projet peut-être soit dans une ou l’autre des tables
mais pas dans les deux. La somme des objets dans les deux tables correspond à la somme des
projets.
4.2
Les types :
Create type Projet_t as Object (noP int, livraisonP Date, totalBudgetP real, margeP real)
NOT INSTANTIABLE NOT FINAL
/
Create type compteBanque_t as Object (
noCB int,
soldeCB real,
dateOuvCB Date,
dateFinCB Date) FINAL INSTANTIABLE
/
Create or replace type projetCourant_t UNDER projet_t (
stDepensePC real,
cumulPayePC real,
margeDispPC real,
refCB REF compteBanque_t
) INSTANTIABLE FINAL
/
Create type ProjetTermine_t UNDER projet_t (
totalDepensesPT Real
) INSTANTIABLE FINAL
/
Create or Replace type Proprio_t as Object (
refClient REF clientPromo_t,
refProjet REF projetTermine_t) INSTANTIABLE FINAL
/
Le type ClientPromo_t est déjà créé et présent dans le dictionnaire du SGBD.
Les tables-objets :
Il y a 4 tables à créer : ProjetCourant, ProjetTermine, CompteBanque et Proprio.
Create table ProjetCourant of projetCourant_t ( Constraint
pk_ProjetCourant Primary Key (noP), Constraint
c1_noP check (noP>=1000 AND noP<=4999), Constraint
c2_noP check (noP IS NOT NULL)
);
Create table ProjetTermine of projetTermine_t ( Constraint
pk_projetTermine Primary Key (noP), Constraint
c3_noP check(noP>=1000 AND noP<=4999), Constraint
c4_noP check (noP IS NOT NULL)
);
Create table CompteBanque of compteBanque_t (
Constraint pk_CompteBanque Primary Key (noCB),
Constraint c1_noCB check (noCB>=10000 AND noCB <=15000),
Constraint c2_noCB check (noCB IS NOT NULL)
);
Create table Proprio of proprio_t ;
Aucune clé primaire n’est déclarée pour la table Proprio bien que pour chaque objet Proprio soit
distinct lorsqu’il y une valeur combinée de deux oids. En l’absence d’un oid sur ProjetTerminé, les
2 attributs ne peuvent pas jouer le rôle de clé.
4.3
En surchargeant ce constructeur, tout clientPromo créé avec ce constructeur ne pourra jamais
avoir d’associés. Si cela change par la suite, la mise ne sera pas possible autrement qu’en
recréant cet objet avec son constructeur implicite autorisant les associés.
ALTER TYPE clientPromo_t ADD
CONSTRUCTOR FUNCTION clientPromo_t (mat IN int, nom IN varchar2, adress IN varchar2)
RETURN SELF AS RESULT;
/
CREATE OR REPLACE TYPE BODY clientPromo_t AS
CONSTRUCTOR FUNCTION clientPromo_t (mat IN int, nom IN varchar2, adress IN varchar2)
RETURN SELF AS RESULT
IS
BEGIN
SELF.matC := mat;
SELF.nomC := nom ;
SELF.adrC := adres ;
Self.lesAssocies := null ;
RETURN;
END;
END;
/
4.4
Alter type projetCourant_t ADD
MEMBER procedure Ajout CASCADE ;
4.5
Create or Replace type body projetCourant_t AS
MEMBER procedure Ajout (no int, livraison Date, totalBudg real)
IS
BEGIN
Self.noP := no ;
Self.livraisonP := livraison ;
Self.totalBudgetP := totalBudg ;
Self.margeP := totalBudg /10 ;
Self.stDepensePC := 0 ;
Self.cumulPayePC := 0 ;
Self.margeDispPC := totalBud /10 ;
Self.refCB := null ;
Insert into ProjetCourant values(self) ;
END ;
END ;
/

Contenu connexe

Similaire à Projet base de donnée

Atelier18
Atelier18 Atelier18
Atelier18
ChaimaaKibal
 
pmsipilotMCOCriteria
pmsipilotMCOCriteriapmsipilotMCOCriteria
pmsipilotMCOCriteria
PMSIpilot
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
abdelkhalek benhoumine
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  la validation.pdflaravel.sillo.org-Cours Laravel 10  les bases  la validation.pdf
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
HeartKing10
 
PFE PSA Peugeot Citroen - Prototypage rapide
PFE PSA Peugeot Citroen - Prototypage rapide PFE PSA Peugeot Citroen - Prototypage rapide
PFE PSA Peugeot Citroen - Prototypage rapide Régis Castéran
 
Ligthning Component
Ligthning ComponentLigthning Component
Ligthning Component
Thierry TROUIN ☁
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensions
wyggio
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
Abdoulaye Dieng
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
Rossi Oddet
 
spring-boot-fr.pdf
spring-boot-fr.pdfspring-boot-fr.pdf
spring-boot-fr.pdf
seydou4devops
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
Mickael Perraud
 
Atelier gwt
Atelier gwtAtelier gwt
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
MongoDB
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
Mathieu Goeminne
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
Korteby Farouk
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
abderrahim marzouk
 

Similaire à Projet base de donnée (20)

Atelier18
Atelier18 Atelier18
Atelier18
 
Linq Tech Days08 Lux
Linq Tech Days08 LuxLinq Tech Days08 Lux
Linq Tech Days08 Lux
 
pmsipilotMCOCriteria
pmsipilotMCOCriteriapmsipilotMCOCriteria
pmsipilotMCOCriteria
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  la validation.pdflaravel.sillo.org-Cours Laravel 10  les bases  la validation.pdf
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
 
PFE PSA Peugeot Citroen - Prototypage rapide
PFE PSA Peugeot Citroen - Prototypage rapide PFE PSA Peugeot Citroen - Prototypage rapide
PFE PSA Peugeot Citroen - Prototypage rapide
 
Ligthning Component
Ligthning ComponentLigthning Component
Ligthning Component
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensions
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 
spring-boot-fr.pdf
spring-boot-fr.pdfspring-boot-fr.pdf
spring-boot-fr.pdf
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Atelier gwt
Atelier gwtAtelier gwt
Atelier gwt
 
Atelier2
Atelier2Atelier2
Atelier2
 
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
 
03 préparer le pmp management des coût
03 préparer le pmp   management des coût03 préparer le pmp   management des coût
03 préparer le pmp management des coût
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
 

Projet base de donnée

  • 1. Réponses Etape 1 : Le modèle navigationnel GPC du diagramme de classe est le suivant : ClientPromo matC* : int nomC : varchar adrC : varchar lesChantiers lesAssocies Associe noAs nomAs capital <<Projet>> noP* : int livraisonP :Date SiteChantier noSC* : int villeSC : varchar leChefDirige leChefSuper Chef nas*:int anServ : int Usine Proprio noU* : int leClient villeU : varchar leProjet ChargeProjet nasCP* : varchar refPC refUs totalBudgetP : real margeP : real (c,d) ProjetCourant stDepensePC : real cumulPayePC : real margeDispPC : real refCB CompteBanque noCB* : int soldeCB : real dateOuvCB : Date dateFinCB : Date ProjetTermine totalDepensesPT : real Etape 2 Supervision et direction de chantier (une partie du diagramme de classe) Voici le diagramme de classe UML de départ :
  • 2. Dirige >SiteChantier Chef 0..1 1 noSC* : int nas* :int villeSC : varchar 0..10..3 anServ : int Supervise > ChangerChef() Le modèle navigationnel partiel correspondant est le suivant : SiteChantier noSC* : int villeSC : varchar leChefDirige leChefSuper Chef nas* :int anServ : int
  • 3. ChangerChef() Questions : 2.1 Create type Chef_t as Object( nas int, anServ int ) / Create type SiteChantier_t as Object( noSC int, villeSC varchar2(50), leChefDirige REF chef_t, leChefSuper REF chef_t ) / 2.2 Les contraintes se définissent que sur les tables. Create table Chef of chef_t ( Constraint pk_nas Primary Key (nas), Constraint c_nas check(nas>80 AND nasC<99), Constraint c1_nas check (nas IS NOT NULL) ) Create table SiteChantier of siteChantier_t ( Constraint pk_noSC Primary Key (noSC), Constraint c1_noSC check (noSC>100 AND noSC<999), Constraint c2_noSC check (noSC IS NOT NULL) ); Un attribut de référence doit être non null et tandis que l’autre peut-être null. Alter table SiteChantier add Constraint c3_leChefDirige Check( leChefDirige IS NOT NULL) ; 2.3 insert into Chef values(chef_t(80,10)); insert into Chef values(chef_t(84,15)); insert into Chef values(chef_t(85,17)); insert into Chef values(chef_t(81,11)); insert into Chef values(chef_t(83,11));
  • 4. Insert into SiteChantier values(SiteChantier_t(200,'Québec', (select REF(x) From Chef x where x.nas =80), (select REF(x) From Chef x where x.nas = 80))); Insert into SiteChantier values(SiteChantier_t(206,'Monaco',(select REF(x) From Chef x where x.nasC=81), (select REF(x) From Chef x where x.nasC=80))); Insert into SiteChantier values(SiteChantier_t(207,'Rome',(select REF(x) From Chef x where x.nas=84), (select REF(x) From Chef x where x.nas =84))); Insert into SiteChantier values(SiteChantier_t(208,'Paris',(select REF(x) From Chef x where x.nas=83), (select REF(x) From Chef x where x.nas =85))); 2. 4 Pour y arriver, il faut utiliser l’oid du chef dont le nas est connu. Cet oid sera comparé avec l’oid de la référence leChefDirige de la table SiteChantier. Etape 3 Le modèle navigationnel partiel correspondant est le suivant : Le modèle navigationnel comprend un lien interne multiple et son interface composée de signatures. modifClient() : méthode pour modifier le nom d’un client. augmente10Capital() : méthode pour augmenter de 10% le capital d’un associé. Cette méthode devra être appelée par un objet-colonne. Questions : 3.1 Comme le stipule le scénario, lorsqu’un Client-promoteur cesse ses activités alors le lien avec ses associes disparaît automatiquement. En implantant la composition avec une classe interne, en supprimant un objet Client-Promoteur, ses associés sont aussi supprimés sans autres opérations. 3.2 Create or replace Type associe_t as Object (noAs int, nomAs varchar2(30), capit int) / Create OR Replace Type lesAssocies_t AS TABLE OF associe_t / Create Type clientPromo_t as Object (matC int, nomC varchar2(30), adrC varchar2(30),
  • 5. lesAssocies lesAssocies_t) / La contrainte se définit au niveau de la table, et ici au niveau de la table imbriquée, APRES la création de la table contenante. Create Table ClientPromo of clientPromo_t ( Constraint pk_clientPromo Primary Key (matC), Constraint c_matC Check (matC >=10000 AND matC <=10500)) NESTED TABLE lesAssocies STORE AS TablelesAssocies; Les contraintes sur les attributs de l’objet-colonne ou de la table imbriquée s’appliquent sur la table physique créée pour stocker les objets de la table imbriquée. Dans ce cas-ci la table physique est connue car elle a été nommée par la création de la table principale : TablelesAssocies Alter Table TablelesAssocies ADD Constraint c1_noAs Check(noAs>=5000 AND noAs<=6000) ; Alter Table TablelesAssocies ADD Constraint c2_capit Check(capit <=1000000) ; 3.3 Alter type clientPromo_t ADD Member Procedure modifNomClient Cascade ; Alter type clientPromo_t ADD Member Procedure augmente10Capital () Cascade ; 3.4 Create OR Replace Type Body ClientPromo_t AS MEMBER Procedure modifNomClient IS clientP clientPromo_t ; BEGIN /* Select value(cp) into clientP from ClientPromo Where matC = self.matC ; clientP.nomC := self.nomC ; */ Update ClientPromo cp set cp.nomC = self.nomC Where cp.matC = self.matC ; end; / 3.5 Insert into ClientPromo values (clientPromo_t(10034, 'Etienne','Ste-Foy', lesAssocies_t ( associe_t (5002,'Kerris', 110000), associe_t(5003,'Ana', 120000), associe_t(5003,'Pierre', 830000) ))); Etape 4
  • 6. Questions : 4.1 La classe abstraite <<Projet>> permet l’héritage des attributs et des signatures. Elle ne peut pas être instanciée (NOT INSTANTIABLE) mais elle est spécialisée (NOT FINAL). Il ne pourra donc pas y avoir d’objet du type projet_t. Pour valider le disjoint, il faut vérifier que tout projet peut-être soit dans une ou l’autre des tables mais pas dans les deux. La somme des objets dans les deux tables correspond à la somme des projets. 4.2 Les types : Create type Projet_t as Object (noP int, livraisonP Date, totalBudgetP real, margeP real) NOT INSTANTIABLE NOT FINAL / Create type compteBanque_t as Object ( noCB int, soldeCB real, dateOuvCB Date, dateFinCB Date) FINAL INSTANTIABLE / Create or replace type projetCourant_t UNDER projet_t ( stDepensePC real, cumulPayePC real, margeDispPC real, refCB REF compteBanque_t ) INSTANTIABLE FINAL
  • 7. / Create type ProjetTermine_t UNDER projet_t ( totalDepensesPT Real ) INSTANTIABLE FINAL / Create or Replace type Proprio_t as Object ( refClient REF clientPromo_t, refProjet REF projetTermine_t) INSTANTIABLE FINAL / Le type ClientPromo_t est déjà créé et présent dans le dictionnaire du SGBD. Les tables-objets : Il y a 4 tables à créer : ProjetCourant, ProjetTermine, CompteBanque et Proprio. Create table ProjetCourant of projetCourant_t ( Constraint pk_ProjetCourant Primary Key (noP), Constraint c1_noP check (noP>=1000 AND noP<=4999), Constraint c2_noP check (noP IS NOT NULL) ); Create table ProjetTermine of projetTermine_t ( Constraint pk_projetTermine Primary Key (noP), Constraint c3_noP check(noP>=1000 AND noP<=4999), Constraint c4_noP check (noP IS NOT NULL) ); Create table CompteBanque of compteBanque_t ( Constraint pk_CompteBanque Primary Key (noCB), Constraint c1_noCB check (noCB>=10000 AND noCB <=15000), Constraint c2_noCB check (noCB IS NOT NULL) ); Create table Proprio of proprio_t ; Aucune clé primaire n’est déclarée pour la table Proprio bien que pour chaque objet Proprio soit distinct lorsqu’il y une valeur combinée de deux oids. En l’absence d’un oid sur ProjetTerminé, les 2 attributs ne peuvent pas jouer le rôle de clé. 4.3 En surchargeant ce constructeur, tout clientPromo créé avec ce constructeur ne pourra jamais avoir d’associés. Si cela change par la suite, la mise ne sera pas possible autrement qu’en recréant cet objet avec son constructeur implicite autorisant les associés. ALTER TYPE clientPromo_t ADD CONSTRUCTOR FUNCTION clientPromo_t (mat IN int, nom IN varchar2, adress IN varchar2) RETURN SELF AS RESULT; /
  • 8. CREATE OR REPLACE TYPE BODY clientPromo_t AS CONSTRUCTOR FUNCTION clientPromo_t (mat IN int, nom IN varchar2, adress IN varchar2) RETURN SELF AS RESULT IS BEGIN SELF.matC := mat; SELF.nomC := nom ; SELF.adrC := adres ; Self.lesAssocies := null ; RETURN; END; END; / 4.4 Alter type projetCourant_t ADD MEMBER procedure Ajout CASCADE ; 4.5 Create or Replace type body projetCourant_t AS MEMBER procedure Ajout (no int, livraison Date, totalBudg real) IS BEGIN Self.noP := no ; Self.livraisonP := livraison ; Self.totalBudgetP := totalBudg ; Self.margeP := totalBudg /10 ; Self.stDepensePC := 0 ; Self.cumulPayePC := 0 ; Self.margeDispPC := totalBud /10 ; Self.refCB := null ; Insert into ProjetCourant values(self) ; END ; END ; /