Bonjour,

Voici mon problème, je dois mettre quelques conditions sur le VALUES du champ ETATPROJ. Pour cela j'utilise un CASE, a la fin de mon CASE si aucune des conditions n'est rempli alors la valeur a insérer est NULL. J'ai une erreur de syntaxe sur mon case mais je ne vois pas l'erreur.

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
CREATE OR REPLACE PROCEDURE TSA.P_GDAI_TO_TSA (pNUMINT IN TSA.NUMINT%TYPE) AS 
 
BEGIN
 
    -- Faire un curseurDA qui prend tous les champs de GDA_DA
	DECLARE CURSOR curseurDA IS
	SELECT * FROM DBGDA.GDA_DA WHERE DBGDA.NUMINTDEM = pNUMINT;
 
    -- Ensuite faire un IF Curseur.NUMDA NOT IN (SELECT * NUMDA FROM TSA.TSA_PROJET) THEN (la procédure) ELSE Curseur+1 END IF)
    BEGIN 
 
        FOR DA_rec in curseurDA 
        LOOP 
            IF DA_rec.NUMDA NOT IN (SELECT TSA.TSA_PROJET.NUMDA FROM TSA.TSA_PROJET) THEN
                INSERT INTO TSA.TSA_PROJET( 
                                            ETATPROJ,
                                            NUMINT,
                                            LIBPROJ,
                                            COUTPREV,
                                            TYPTAXE,
                                            NUMCOM,
                                            DATTRANSMISSION,
                                            NUMDA,
                                            CODREFUS,
                                            USERCRE,
                                            DATCRE,
                                            USERMOD,
                                            DATMOD
                )
                VALUES(
                /* ETATPROJ        */      CASE WHEN DA_rec.ETATDA IN ('S100', 'S110') THEN 'P30'  -- Transmis
 
                                                 WHEN DA_rec.ETATDA = 'S120' -- DA Rattachée à au moins une opération 
                                                 AND EXISTS(SELECT * FROM DBGDA.V_DA_LISTE_ETATOPER t1 JOIN DBGDA.GDA_DA t2 ON t1.NUMDA = t2.NUMDA JOIN DBGDA.V_OPER_LISTE_ETATCONV t3 ON t1.NUMOPER = t3.NUMOPER WHERE t2.NUMINTDEM = pNUMINT AND (t3.ETATCONV >= 130 AND t3.ETATCONV < 200)) THEN 'P60' -- Conventionné
 
                                                 ELSE CASE WHEN DA_rec.ETATDA = 'S120' 
                                                 AND EXISTS(SELECT * FROM DBGDA.V_DA_LISTE_ETATOPER t1 JOIN DBGDA.GDA_DA t2 ON t1.NUMDA = t2.NUMDA WHERE t2.NUMINTDEM = pNUMINT AND (t1.ETATOPER >= 110 AND t1.ETATOPER < 190)) THEN 'P50' -- Décidé
 
                                                     ELSE CASE WHEN DA_rec.ETATDA = 'S120' 
                                                     AND EXISTS(SELECT * FROM DBGDA.V_DA_LISTE_ETATOPER t1 JOIN DBGDA.GDA_DA t2 ON t1.NUMDA = t2.NUMDA WHERE t2.NUMINTDEM = pNUMINT AND (t1.ETATOPER >= 106 AND t1.ETATOPER < 190)) THEN 'P40' -- Complet
 
                                                         ELSE CASE WHEN DA_rec.ETATDA = 'S120' 
                                                         AND EXISTS(SELECT * FROM DBGDA.V_DA_LISTE_ETATOPER t1 JOIN DBGDA.GDA_DA t2 ON t1.NUMDA = t2.NUMDA WHERE t2.NUMINTDEM = pNUMINT AND (t1.ETATOPER = 100)) THEN 'P30' -- Initialisée
 
                                                            ELSE NULL
                                                            END,
 
                /* NUMINT          */       DA_rec.NUMINTDEM AS NUMINT,
                /* LIBPROJ         */       DA_rec.OBJDA AS LIBPROJ,
                /* COUTPREV        */       DA_rec.MTGLOB AS COUTPREV,
                /* TYPTAXE         */       DA_rec.TYPTAXE AS TYPTAXE,
                /* NUMCOM          */       DA_rec.NUMCOMTRAV AS NUMCOM,
                /* DATTRANSMISSION */       DA_rec.DATDEM AS DATTRANSMISSION,
                /* NUMDA           */       DA_rec.NUMDA AS NUMDA,
                /* CODREFUS        */       DA_rec.CODREFUS AS CODREFUS,
                /* USERCRE         */       'Batch AI' AS USERCRE,
                /* DATCRE          */       SYSDATE AS DATECRE,
                /* USERMOD         */       NULL AS USERMOD,
                /* DATMOD          */       NULL AS DATMOD
                )
 
                -- Pour chaque DA non prise en compte dans le test précédent 
                UPDATE DBGDA.GDA_DA
                SET DBGDA.GDA_DA.ORIGINE = 'GDAI'
                DBGDA.GDA_DA.PROJTSA = 'N'
                WHERE DBGDA.GDA_DA.NUMINTDEM = pNUMINT
                AND DBGDA.GDA_DA.NUMDA = DA_rec.NUMDA
                AND DA_rec.ETATDA NOT IN ('S100', 'S110', 'S120');
 
 
                -- Si le numéro de programme est >= 10, à l’état S100 – Initial ou S110 – Recevable ou S120 – Rattachée à au moins une opération dans un état < 170 - Soldée: Mise à jour des champs de la DA : Origine = ‘GDAI’ et Projet Téléservice= ‘N’
                UPDATE DBGDA.GDA_DA
                SET DBGDA.GDA_DA.ORIGINE = (CASE WHEN DA_rec.NUMPROG >= 10 
                                            AND DA_rec.ETATDA IN ('S110', 'S120') 
                                            AND (SELECT DBGDA.V_DA_LISTE_ETATOPER.ETATOPER FROM DBGDA.GDA_DA JOIN DBGDA.V_DA_LISTE_ETATOPER ON DBGDA.GDA_DA.NUMDA=DBGDA.V_DA_LISTE_ETATOPER.NUMDA WHERE DBGDA.GDA_DA.NUMINTDEM=pNUMINT) > 170 THEN 'GDAI' ELSE DA_rec.ORIGINE END),
                    DBGDA.GDA_DA.PROJTSA = (CASE WHEN DA_rec.NUMPROG >= 10 
                                            AND DA_rec.ETATDA IN ('S110', 'S120') 
                                            AND (SELECT DBGDA.V_DA_LISTE_ETATOPER.ETATOPER FROM DBGDA.GDA_DA JOIN DBGDA.V_DA_LISTE_ETATOPER ON DBGDA.GDA_DA.NUMDA=DBGDA.V_DA_LISTE_ETATOPER.NUMDA WHERE DBGDA.GDA_DA.NUMINTDEM=pNUMINT) > 170 THEN 'O' ELSE DA_rec.PROJTSA END)
                WHERE DA_rec.NUMINTDEM = pNUMINT
            END IF;
        END LOOP;
    END;
END;
Merci d'avance.