Bonjour,
Je debute en PL/SQL et je me suis basée sur les Tutoriaux de Developpez.com pour ma procedure (tuto très bien faits d'ailleurs, milles mercis aux auteurs !)

Je travaille sous Oracle 10g et j'utilise PL/SQL Developper 7 pour la mise en place de mes procédures.

Mon probleme est le suivant :

Dans la clause WHERE de ma procédure, le champ V de la table TB_LF n'est pas toujours renseigné. Je voudrais donc qu'il ne soit testé dans la clause que s'il existe, sinon il ne faudrait pas en tenir compte (en rouge dans la procedure jointe plus bas). Mon SQL ne fonctionne pas ...
Je pensais peut etre qu'en passant par des IF ca serait possible, mais je n'ai pas l'impression que ca soit possible d'en mettre dans le WHERE.

Si vous aviez des idées ou des pistes que je puisse explorer, je vous en serais reconnaissante. Je ne connais pas trop les possibilités du PL/SQL en fait ...


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
create or replace 
procedure BO_UP 
is 
        UPCLE TB_UP.CLE%TYPE; 
        UPL   TB_LL.L%TYPE; 
        UPV   TB_LL.V%TYPE; 
        UPD   TB_LL.D%TYPE; 
        UPF   TB_LL.F%TYPE; 
        UPC   TB_LL.C%TYPE; 
        Cursor C_UP 
        is 
        SELECT  TB_UP.CLE, 
                TB_LL.L, 
                TB_LL.V, 
                TB_LL.D, 
                TB_LL.F, 
                TB_LL.C 
        FROM    TB_UP, 
                TB_LCUP, 
                TB_LC, 
                TB_LL 
        WHERE   (TB_UP.CLE         = TB_LCUP.CLE_TB_UP) 
            AND (TB_LCUP.CLE_TB_LC = TB_LC.CLE) 
            AND (TB_LC.LL          = TB_LL.CLE); 
begin 
        /* récupération des UP */ 
        Open C_UP; 
        Loop -- boucle sur les UP       
        begin 
                Fetch C_UP into UPCLE, 
                UPL, 
                UPV, 
                UPD, 
                UPF, 
                UPC;        -- lecture d'une ligne       
        UPDATE ARMDBA.BO_LF -- mise à jour de la table BO_LF       
                SET IDUP  = UPCLE 
        WHERE   (BO_LF.L  = UPL) 
            AND ((BO_LF.V = UPV) AND (BO_LF.V is not null)) 
            AND ((BO_LF.D BETWEEN UPD AND UPF)) 
            AND (BO_LF.O = UPC); 
        Exit 
when C_UP%NOTFOUND; 
EXCEPTION 
        /* gestion des exceptions */ 
When OTHERS then 
        dbms_output.put_line( 'Code    erreur : ' || to_char( SQLCODE )) ; 
        dbms_output.put_line( 'libellé erreur : ' || to_char( SQLERRM )) ; 
end; 
End Loop; 
Close C_UP; 
end BO_UP;