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 28/09/2011, 10h45   #1
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
Par défaut Type de données

Bonjour,

je créé un package dans lequel je définis un type de données.
Ce type je le déclare ensuite comme un paramètre dans une fonction et j'ai une erreur de compilation lorsque j'appelle cette fonction.

Voici le code :

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
 
CREATE OR REPLACE PACKAGE TEST AS
 
  TYPE t_daily_plan IS RECORD (
                                beginDate DATE,
                                endDate DATE
                              );
  TYPE t_planning IS TABLE OF t_daily_plan INDEX BY BINARY_INTEGER;
 
  PROCEDURE CALCULATE_SLA;
  FUNCTION DIFFERENCE_BETWEEN_IN_SECOND(debutPeriode DATE, finPeriode DATE, planning t_planning, code_plan NUMBER ) RETURN NUMBER;
 
 
 END;
 
CREATE OR REPLACE PACKAGE BODY test AS
 
 
PROCEDURE CALCULATE_SLA
  AS
    ref_time DATE := SYSDATE;
    ref_time_plus DATE := SYSDATE + 1;
    curPlan NUMBER := -1;
 
 
    planning t_planning;
BEGIN
....
 
planning(1).beginDate = SYSDATE -2;
planning(1).beginDate = SYSDATE +2;
 
tabGrpSla(1) := 0;
tabGrpSla(1) := tabGrpSla(1) +
                                        DIFFERENCE_BEETWEEN_IN_SECOND(ref_time_plus, ref_time,
                                                                      planning,
                                                                      curPlan);
 
END;
 
 
FUNCTION DIFFERENCE_BETWEEN_IN_SECOND(debutPeriode DATE, finPeriode DATE, planning t_planning,
                                                         code_plan NUMBER ) RETURN NUMBER
IS
BEGIN
....
END;
 
END;
Comment procéder ?

Merci
sfoggy est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 11h20   #2
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

Quelle erreur exactement ?
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h20   #3
Membre expérimenté
 
François
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 306
Points : 536
Points : 536
Par défaut RTFM ?

Comment proceder?
Lire l'erreur, et voir la ligne qui y correspond.

Une erreur de compilation, en regle generale le compilateur indique la ligne, et quelle est l'erreur.
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h26   #4
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
Voici le message d'erreur

PLS-00306: numéro ou types d'arguments erronés dans appel à 'DIFFERENCE_BEETWEEN_IN_SECOND'

C'est la première fois que j'utilise cette notion de Type que je ne connais pas le mode de fonctionnement et de ce fait je pense que c'est là que le problème se trouve.

Merci
sfoggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h43   #5
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Ta fonction possede bien une clause RETURN ?

Code :
1
2
3
4
5
6
7
8
9
10
11
 
	FUNCTION DIFFERENCE_BETWEEN_IN_SECOND(	debutPeriode DATE
					, 	finPeriode DATE
					, 	planning t_planning
					,	code_plan NUMBER ) 
	RETURN NUMBER
	IS
	BEGIN
	....
        RETURN .... ;
	END;
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 28/09/2011, 11h44   #6
Membre expérimenté
 
François
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 306
Points : 536
Points : 536
Comment proceduer, etape 2:
Le numero de ligne, ca situe ou se situe l'erreur. C'est pas un jeu de devinette.
Et, tres important, lire le message d'erreur en essayant de le comprendre...


Le probleme se situe dans l'appel a la fonction, pas dans la fonction. En gros, en lisant le message d'erreur on situe l'origine du probleme. Et la vous ne nous montrez pas du tout ce qu'il faut pour qu'on puisse vous aider.
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 12h10   #7
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
Pour ORA-OO7:

la fonction possède bien un return number.


Pour Rams7s :
l'appel de la fonction posant problème est en exemple dans la première entête de code.

Code :
1
2
3
 
tabGrpSla(1) := tabGrpSla(1) +
                                        DIFFERENCE_BEETWEEN_IN_SECOND(ref_time_plus, ref_time, planning,    curPlan);
J'espère que ces réponses vous éclairent sur mon problème.
sfoggy est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 14h00   #8
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
J'ai avancé dans la recherche du problème. En fait le programme prenait une autre fonction.

Le problème maintenant, c'est qu'il ne reconnaît pas la fonction.
PLS-00201: l'identificateur 'DIFFERENCE_BEETWEEN_IN_SECOND' doit être déclaré

Comment appelle t-on une fonction à l'intérieure d'un package d'une autre fonction appartenant à ce package ?

Merci
sfoggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h09   #9
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
L'appel de fonction à l'intérieur d'un même package marche comme tu l'as codé.
Tu peux préciser nom_du_package.nom_fonction, mais ce n'est pas utile.

Si la fonction n'est pas déclarée en entête de package, alors il faut que le corps de la fonction soit avant le code de la procédure qui l'appelle, mais ce n'est pas ton cas vu que tu as déclaré en entête.

Le code a changé depuis le premier post ?
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 14h43   #10
Membre expérimenté
 
François
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 306
Points : 536
Points : 536
Par défaut ORA -20001 : Lire le message en prenant son temps



D'apres le code que vous avez poste au debut:
Ligne 42 et 35:
BETWEEN et BEETWEEN


Plus serieusement, je vais probablement avoir l'air d'insister tres lourdement, mais jusque la, lire le message d'erreur repond a la question.
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 15h02   #11
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
Merci à tous pour votre aide

pour Rams7s un e fait toute la différence.

Un regard extérieur fait la différence.
sfoggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h07.


 
 
 
 
Partenaires

Hébergement Web