Bonjour à tous,
J' ai un problème pour gérer une éxception dans une fonction en PL/SQL.
Ma fonction parcours une table, doit me selectionner la plus grande date contenue dans cette table pour un client donné et la soustraire à la date du jour. Le code de cette fonction marche tres bien quand je l'appelle en JAVA. Le problème, c'est quand le client n'est pas encore dans la table, c'est-à-dire qu'il n'y a pas de date lui corréspondant, un éxception est levée sous Eclipse, qui m'indique qu'aucune valeur n'est retournée, mais le programme continu à tourner sans problème. Je voudrais qu'il n'y ait plus d'affichage.
C'est pourquoi j'ai décidé de gérer l'éxception en PL/SQL.
Voici mon code :
Le probleme avec cette exception, c'est que maintenant mon code ne marche plus, la valeur retournée est incorrecte, il me retourne tout le temps 0.
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 CREATE OR REPLACE FUNCTION EmpecheVote (loginUtil IN CLIENT.login%type) RETURN INTEGER IS BEGIN DECLARE presant INTEGER; i INTEGER; k INTEGER; temp DATE; CURSOR monC IS SELECT DateNote FROM TempIndFilm WHERE loginNoteur = loginUtil; TYPE TableDate IS Table Of DATE INDEX BY BINARY_INTEGER; tabdate TableDate; BEGIN presant:=-1; k:=0; i:=0; FOR elt in monC LOOP tabdate(i):=TO_DATE(elt.DateNote); i:=i+1; END LOOP; temp:=tabDate(0); FOR i IN 1..tabdate.COUNT() -1 LOOP IF tabdate(i) > temp THEN temp:=tabdate(i); END IF; END LOOP; IF (SYSDATE - temp>1) THEN presant:=1; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN presant:=0; return presant; END; END EmpecheVote; /
J'aimerais savoir si l'erreur vient de la synthaxe de mon éxception ou si elle est male placée...
Partager