Bonsoir à tous,

Oracle9i Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production

Je viens de constater un bug avec l'instruction CASE

Exemple 1 :

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
 
UPDATE TL_TEST 
SET RESU_REPONSE=(CASE FLACO_ID 
                       WHEN 'A' THEN
 --C'est à ce niveau, que je vais tester les différents cas
                            (CASE ETIQ_REPLIQUE 
                            WHEN 1 THEN NULL
                            WHEN 2 THEN 1  
                            ELSE NULL END) 
--Fin zone de test
                       WHEN 'B' THEN 
                            (CASE ETIQ_REPLIQUE 
                            WHEN 1 THEN 1 
                            WHEN 2 THEN 2
                            ELSE NULL END)  
                       ELSE NULL END)
Exemple 1 qui fonctionne :
WHEN 1 THEN NULL
WHEN 2 THEN 1
ELSE NULL END

Exemple 2 :

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
 
UPDATE TL_TEST
SET RESU_REPONSE=(CASE FLACO_ID
                       WHEN 'A' THEN
                            (CASE ETIQ_REPLIQUE
--LES VALEURS SONT A NULLS
                            WHEN 1 THEN NULL
                            WHEN 2 THEN NULL
                            ELSE NULL END)
--fin zone de test
                       WHEN 'B' THEN
                            (CASE ETIQ_REPLIQUE
                            WHEN 1 THEN 1
                            WHEN 2 THEN 2
                            ELSE NULL END)
                       ELSE NULL END)
Exemple 2 : ORA-00938: Nombre d'arguments insuffisant pour la fonction

Bizarre non ????

Vous allez surement me dire que mon exemple 2 est complétement loufoque car dans tous les cas j'affecte la valeur NULL est qu'un CASE est complétement inutile !
je suis tout à fait d'accord, simplement le pb que je souléve intervient dans une fonction stockée qui me permet de générer des instructions CASE dynamiques et qui fonctionne parfaitement hormis dans ce cas que je présente ci-dessus (et que j'ai bien entendu simplifié pour décrire le pb)

y-a t-il une possibilité de contourner le pb en gardant le CASE dans l'état ?

merci de votre aide
@