Base de données

//appel.sql
create table result (r varchar(100));

declare
res number;
resu varchar(100);
begin
resu := to_char (Tcamion.plusLourd2() );
dbms_output.put_line (‘plus lourd : ‘ || resu);
insert into result(r) values (resu) ;
/* select * from result; */
end appel;
/

//camion.sql
drop table ElementCharge;
drop table Produit;
drop table Charge;
drop table Camion;
drop typeTelementCharge;
drop type Tproduit;
drop type Tcharge;
drop type Tcamion;

create type Tcamion as object
(noImmat varchar(10),
poidsVide decimal(10),
poidsMaxi decimal(10),
static function plusLourd return varchar,
member function poidsCamion return decimal
)
/
create type Tcharge as object
(noCharge decimal(10),
dateLivraison date,
poidsCharge decimal(10),
camionref Tcamion
)
/
create type Tproduit as object
(noproduit decimal(10),
libelleProduit varchar(20)
)
/
create type TelementCharge as object
(charge ref Tcharge,
produit ref Tproduit,
quantite decimal(10)
)
/
create table Camion of Tcamion
(primary key (noImmat) )
storage (initial 16K)
/
create table Charge of Tcharge
(primary key (noCharge),
check (camion is notnull),
foreign key (camion) references Camion )
storage (initial 16K)
/
create table Produit of Tproduit
(primary key (noProduit) )
storage (initial 16K)
/
create table ElementCharge of TelementCharge
(check (charge is not null),
check (produit is not null),
foreign key (charge) references Charge,
foreign key (produit) references Produit )
storage (initial 16K)
/
createor replace type body Tcamion as
member function poidsCamion return decimal is
poids decimal;
begin
select sum (c.poidsCharge) into poids
from Charge c
where c.camion.noImmat = self.noImmat;
poids := nvl(poids,0) + self.poidsVide;
return poids;
end poidsCamion;
static function plusLourd return varchar is
numero Camion.noImmat%type;
begin
select c1.noImmat into numerofrom Camion c1
where c1.poidsCamion() = (select max(c2.poidsCamion())
from Camion c2);
return numero;
end plusLourd;

end;
/

insert into Camion values
(‘123’, 1000, 3000);
insert into Camion values
(‘124’, 1200, 4000);
insert into Camion values
(‘125’, 1000, 5000);
insert into Camion values
(‘126’, 1200, 6000)
/
insert into produit values
(10, ‘table XA’);
insertinto produit values
(11, ‘chaise YB’);
insert into produit values
(12, ‘armoire ZC’);

insert into Charge
select 1, ’15-nov-09′, 100, ref(c)
from Camion c
where c.noImmat = ‘123’;
insert into Charge
select 2, ’14-nov-09′, 400, ref(c)
from Camion c
where c.noImmat = ‘124’;
insert into Charge
select 3, ’15-nov-09′, 300, ref(c)
from Camion c
where c.noImmat = ‘123’;

insert intoElementCharge
select ref(c), ref(p), 10
from Charge c, Produit p
where c.noCharge = 1
and noProduit = 10;
insert into ElementCharge
select ref(c), ref(p), 11
from Charge c, Produit p
where c.noCharge = 2
and noProduit = 11;
insert into ElementCharge
select ref(c), ref(p), 12
from Charge c, Produit p
where c.noCharge = 3
and noProduit = 12;

commit;

select c.dateLivraison,sum(c.poidsCharge) « somme des charges »
from Charge c
group by c.dateLivraison
/
select c.camion.noImmat « numero de camion », e.produit.noProduit
« numero de produit », e.produit.libelleproduit « nom de produit »
from Charge c, ElementCharge e
where e.charge = ref(c)
order by c.camion.noImmat
/
select c.noImmat, c.poidsCamion() « poids camion »
from Camion c
/
select Tcamion.plusLourd() « The BigCamion » from dual
/

// corps2.sql
create or replace type body Tcamion as
member function poidsCamion return decimal is
poids decimal;
begin
select sum (c.poidsCharge) into poids
from Charge c
where c.camion.noImmat = self.noImmat;
poids := nvl(poids,0) + self.poidsVide;
return poids;
end poidsCamion;
static function plusLourd return varchar is
numero Camion.noImmat%type;…