Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2011, 13h59   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 63
Points : 13
Points : 13
Par défaut Erreur de compilation

Bonjour,

Sur un Oracle XE, , une erreur de compilation apparait. Le dernier ; est remplacé par if.

Voici la fonction :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
CREATE OR REPLACE  FUNCTION CALCUL_AGE_MOIS (
  CODE_ENFANT IN USAGER.CODENF%TYPE )
RETURN NUMBER IS
 
Li_age NUMBER;
JOUR Number(2);
MOIS Number(2);
ANNEE  Number(6);
JourCou NUMBER;
MoisCou NUMBER;
AnCou NUMBER;
JourNai NUMBER;
MoisNai NUMBER;
AnNai NUMBER;
 
BEGIN
 
  AnCou:= TO_CHAR(SYSDATE,'YYYY');
  MoisCou:= TO_CHAR(SYSDATE,'MM');
  JourCou:= TO_CHAR(SYSDATE,'DD');
 
  SELECT TO_NUMBER(TO_CHAR(DATNAI,'YYYY')), TO_NUMBER(TO_CHAR(DATNAI,'MM')), TO_NUMBER(TO_CHAR(DATNAI,'DD')) INTO AnNai,MoisNai,JourNai
  FROM USAGER
  WHERE CODENF=CODE_ENFANT;
 
	IF AnCou>=ANNEE then
	begin
		IF JourNai>JourCou then
		begin
  		MoisNai:= MoisNai+1;
		end;
 
		IF MoisNai>MoisCou then
		begin
  		AnNai:= AnNai+1;
  		MOIS:= 12-MoisNai+MoisCou;
		end;
		else
		begin
  		MOIS:= MoisCou-MoisNai;
  		ANNEE:= AnCou-AnNai;
		end;
	end IF;
 
 
  Li_age:= ( ANNEE * 12) + MOIS;
  RETURN (Li_age) ;
 
END;
/

Merci pour votre aide.
sosophie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h50   #2
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Il te manque des end if; .

Dans ton code il 3 if mais tu as seulement un end if
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/03/2011, 17h51   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 63
Points : 13
Points : 13
J'y arrrive pas désolé, erreur de compilation symbole if rencontré à la place de ;

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
CREATE OR REPLACE  FUNCTION CALCUL_AGE_MOIS (
  CODE_ENFANT IN USAGER.CODENF%TYPE )
RETURN NUMBER IS
 
Li_age NUMBER;
JOUR Number(2);
MOIS Number(2);
ANNEE  Number(6);
JourCou NUMBER;
MoisCou NUMBER;
AnCou NUMBER;
JourNai NUMBER;
MoisNai NUMBER;
AnNai NUMBER;
 
BEGIN
 
  AnCou:= TO_CHAR(SYSDATE,'YYYY');
  MoisCou:= TO_CHAR(SYSDATE,'MM');
  JourCou:= TO_CHAR(SYSDATE,'DD');
 
  SELECT TO_NUMBER(TO_CHAR(DATNAI,'YYYY')), TO_NUMBER(TO_CHAR(DATNAI,'MM')), TO_NUMBER(TO_CHAR(DATNAI,'DD')) INTO AnNai,MoisNai,JourNai
  FROM USAGER
  WHERE CODENF=CODE_ENFANT;
 
	IF AnCou>=ANNEE then
	begin
		IF JourNai>JourCou then
		begin
  		MoisNai:= MoisNai+1;
		end IF;
 
		IF MoisNai>MoisCou then
		begin
  		AnNai:= AnNai+1;
  		MOIS:= 12-MoisNai+MoisCou;
		end;
		else
		begin
  		MOIS:= MoisCou-MoisNai;
  		ANNEE:= AnCou-AnNai;
		end IF;
	end IF;
 
 
  Li_age:= ( ANNEE * 12) + MOIS;
  RETURN (Li_age) ;
 
END;
/
sosophie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 18h07   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
La syntaxe requiert un minimum de rigueur, comme bien des langages.
Si IF a besoin d'un END IF, BEGIN a besoin d'un END...
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 18h09   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 446
Points : 10 446
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
J'ai surtout l'impression que vous essayez de coder la fonction MONTHS_BETWEEN...
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h28.


 
 
 
 
Partenaires

Hébergement Web