Bonjour à tous

Tout d'abord, je vous souhaite un très joyeux noël ainsi que de bonnes fêtes

Noël c'est le temps des chocolats, du foie gras, des bûches... et du travail pour beaucoup d'étudiants ! :p

Si j'en viens à poster ici c'est que je n'arrive vraiment pas à trouver mes erreurs. Au bout de deux jours de recherches je dois accélérer les choses en raison des nombreux projets et des révisions qui s'annoncent pour ces partiels de début d'année.

J'aimerais donc solliciter votre aide.

Dans le cadre d'un projet j'utilise une base oracle (Express edition 10g) en localhost. Je travaille donc sur la plateforme d'administration classique.

Lors de la création d'une fonction, j'ai très régulièrement ce message d'erreur:

Not found

The requested URL /apex/wwv_flow.show was not found on this server
Malgré mes recherches, je n'en trouve pas la cause.
J'ai pensé que c'était du à une mauvaise utilisation d'un tableau, à l'appel d'une fonction (Que j'ai du coup temporairement supprimé), ou encore à la syntaxe de mes structures conditionnelles mais à chaque fois, je pense toucher le but sans toutefois l'atteindre.

J'ai tant bien que mal essayé de déboguer mon code mais je n'ai rien trouvé. Lorsque je n'ai pas ce fameux message, il m'arrive d'avoir "SQL Statement running", sans que cela ne s'arrête. C'est étrange. J'aurais pensé à une boucle infinie, mais je n'ai rien trouvé dans ce sens, d'ailleurs cela m'étonnerait qu'à la compilation, la fonction soit exécutée d'autant plus qu'elle pourrait nécessiter des paramètres.

Ma fonction permet de savoir si un étudiant a terminé tous les devoirs de la semaine ou non (Il s'agit de la modélisation d'un cartable électronique ).
Voici le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
CREATE OR REPLACE FUNCTION statutDevoirsSemaine RETURN NUMBER AS
 
--Variables relatives à la date du jour.
nomDuJour varchar2(10);
numDuJour varchar2(2);
numMois varchar2(2);
annee varchar2(4);
 
bissextile number(1,0):=0; --Valeurs: 0 si l'année n'est pas bissextile, 1 sinon.
numMaxMois type_tab; --Tableau regroupant les numéros maximaux des jours de chaque mois
termine NUMBER(1,0):=1; --Variable retournée: 1 si tous les devoirs de la semaine sont terminés, 0 sinon.
cpt NUMBER(1,0):=0; --Compteur de boucle
jourParcouru varchar2(2); --Numéro du jour parcouru pour la vérification des statuts des devoirs
nbJoursVerifies NUMBER(5); --Nombre de jours à vérifier (Dépend de la date du jour)
 
BEGIN
--On enregistre le nom du jour
nomDuJour:=to_char(sysdate, 'day');
--Suppression des espaces (Voir explications dans le rapport)
nomDuJour:=TRANSLATE(nomDuJour, '1 ','1');
 
--On enregistre le numéro du jour
numDuJour:=to_char(sysdate, 'DD');
 
--Puis le numéro du mois
numMois:=to_char(sysdate, 'MM');
 
--On cherche à savoir si l'on est dans une année bissextile ou non.
--Algorithme expliqué dans le rapport.
annee:=to_char(sysdate, 'YYYY');
IF mod(annee,4)= 0 THEN
  bissextile:=1;
  IF mod(annee,100) = 0 THEN
    bissextile:=0;
    IF mod(annee,400) = 0 THEN
      bissextile:=1;
    END IF;
  END IF;
END IF;
 
--Selon que l'année soit bissextile ou non, on enregistre dans un tableau le numéro maximal du jour. NOTE; C'est ici que je voulais faire appel à une fonction de remplissage.
IF bissextile = 0 THEN --Si l'année n'est pas bissextile
  numMaxMois:= type_tab('31','28','31','30','31','30','31','31','30','31','30','31');
ELSE --Si l'année est bissextile
  numMaxMois:= type_tab('31','29','31','30','31','30','31','31','30','31','30','31'); 
END IF;
 
 
IF nomDuJour='monday' THEN 
  --On doit vérifier les devoirs pour les 5 prochains jours (Mardi, Mercredi, Jeudi, Vendredi, Samedi)
  nbJoursVerifies:=5;
ELSIF nomDuJour='tuesday' THEN
  --On doit vérifier les devoirs pour les 4 prochains jours (Mercredi, Jeudi, Vendredi, Samedi)
  nbJoursVerifies:=4;
ELSIF nomDuJour='wednesday' THEN
  --On doit vérifier les devoirs pour les 3 prochains jours (Jeudi, Vendredi, Samedi)
  nbJoursVerifies:=3;
ELSIF nomDuJour='thursday' THEN
  --On doit vérifier les devoirs pour les 2 prochains jours (Vendredi, Samedi)
  nbJoursVerifies:=2;
ELSIF nomDuJour='friday' THEN
  --On doit vérifier les devoirs pour le lendemain (Samedi)
  nbJoursVerifies:=1;
ELSIF nomDuJour='saturday' THEN
  --On doit vérifier les devoirs pour la semaine suivante
  nbJoursVerifies:=6;
  numDuJour:=numDuJour+1; --On fait comme si on était dimanche [A modifier, partiellement incorrect]
ELSE
 --On est dimanche, on doit vérifier les devoirs pour la semaine suivante.
 nbJoursVerifies:=6;
END IF;
 
WHILE (termine = 1 AND cpt < nbJoursVerifies) LOOP
IF numDuJour + (cpt+1) <= numMaxMois(numMois) THEN
 jourParcouru:=numDuJour + (cpt+1) || numMois || annee;
ELSE
 jourParcouru:=(cpt+1);
END IF;
termine:=statutDevoirs(jourParcouru); --Appel à la fonction unitaire
cpt:=cpt+1;
END LOOP;
 
RETURN termine;
END;
En espérant que vous pourrez me guider, je vous remercie d'avance.

ps : déclaration de type_tab:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
CREATE OR REPLACE TYPE  "TYPE_TAB" IS VARRAY(12) OF VARCHAR2(2);