Erreur de compilation pl/sql

Fermé
ultra3omda Messages postés 18 Date d'inscription mercredi 22 novembre 2006 Statut Membre Dernière intervention 7 décembre 2012 - 24 mai 2012 à 00:36
 hela - 17 avril 2013 à 18:28
Bonjour,

bonjour cher amis,

j'ai créé une base de données avec une procédure qui calcul le nombre de vol d'un type d'avion passé en paramètre mais le problème que lorsque j'exécute mon code il y a une erreur de compilation de la procédure quelqu'un peut m'aider???
voiçi le code :



drop table affectation;
drop table avion;
drop table vol;
drop table pilote;
drop table appareil;



create table vol(numvol varchar2(20) primary key,villedep varchar2(20), villear varchar2(20), dep_heure varchar2(20),
dep_min varchar2(20), arrivee_heure varchar2(20), arrivee_min varchar2(20));

create table pilote (numpilot varchar2(20) primary key , nom varchar2(20), adresse varchar2(20), salaire varchar2(20),
commission varchar2(20), dateembauche varchar2(20)) ;

create table appareil(codetype varchar2(20) primary key, capacité varchar2(20), design varchar2(20));

create table avion (numavion varchar2(20) primary key, anneeservice varchar2(20), nomavion varchar2(20), nbr_heure_vol varchar2(20),
typeavion varchar2(20), constraint tp foreign key(typeavion) references appareil(codetype));

create table affectation (vol varchar2(20) , avion varchar2(20), date_vol varchar2(20), nbpassage varchar2(20), pilote varchar2(20)
, primary key(vol,avion,date_vol),
constraint tp1 foreign key(vol) references vol(numvol),
constraint tp2 foreign key(avion) references avion(numavion),
constraint tp3 foreign key(pilote) references pilote(numpilot));

insert into vol values('1','Monastir','Paris','12','10','15','00');

insert into vol values('2','Tunis','Napoli','13','40','15','20');

insert into vol values('3','Sfax','Djerba','17','10','17','30');

insert into pilote values('1','Essafi','Mahdia','7000','0','21/12/1988');

insert into pilote values('2','Ben Brahim','Tunis','7000','0','21/12/1989');

insert into pilote values('3','Abdesslem','Mahdia','7000','0','21/12/1990');

insert into appareil values('1','230','airbus');

insert into appareil values('2','130','concord');

insert into appareil values('3','320','airbus A380');

insert into avion values('1','2','A380','17','3');

insert into avion values('2','1','A380','27','3');

insert into avion values('3','3','A380','7','3');

insert into affectation values('1','1','21/01/2001','100','1');

insert into affectation values('2','2','01/01/2010','180','2');

insert into affectation values('3','1','21/01/2003','200','1');

create or replace procedure calculheure () is
v_nbh number;
begin
select * from avion where typeav=typeavion;
v_nbh := v_nbh + nbr_heure_vol ;
DBms_output.put_line('lt total dheure de vol est :'||v_nbh);
end;




3 réponses

jee pee Messages postés 35929 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 4 octobre 2022 8 829
24 mai 2012 à 13:34
Salut,

Je pense que tu devrais d'abord revoir la doc oracle sur le type de variables : il existe d'autres caractéristiques que le varchar2(20) ;-) des champs date, des champs numériques (pour faire des calculs c'est mieux) ...

Puis dans la doc, regarde aussi le create procédure. Dans ta syntaxe il me semble qu'il manque en tête, le paramètre d'entrée. Puis si le select ramène plusieurs lignes il faut gérer un cursor pour la boucle.

Sinon j'écrirais, pour résoudre ta problématique, plutôt cette requête :

select sum(nbr_heure_vol) from avion where typeavion='3' ;

cdlt

0
ultra3omda Messages postés 18 Date d'inscription mercredi 22 novembre 2006 Statut Membre Dernière intervention 7 décembre 2012
24 mai 2012 à 18:01
pas encore resolu je ne c pas pourkoi meme si je met une procedure vide c la méme erreur
0
jee pee Messages postés 35929 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 4 octobre 2022 8 829
24 mai 2012 à 18:15
C'est quoi le message d'erreur ?
0
set serveroutput on
declare
CURSOR c1 is select * from avion where typeavion= '&typeavion';
v_nbh number:=0;
begin
for enreg in c1 loop
v_nbh := v_nbh + enreg.nbr_heure_vol;
end loop;
DBms_output.put_line('le total dheure de vol est :'||v_nbh);
end;
0