Test null/vide - explication résultat

Fermé
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - Modifié par nagaD.scar le 21/11/2016 à 13:37
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 21 nov. 2016 à 13:46
Salut à tous,

Je fais une procédure paramétré afin de récupérer des entrées dans ma base: j'ai deux paramètres d entrée pouvant être vide (pour faire simple la combinaison des deux est une clef unique, et chacun étant une clef).

Je me heurte à un soucis que je ne comprends pas : lors de test via in case/when, quand je test la chaine NULL, le test fonction :

var myVar varchar2(20);
exec :myVar := '';

SELECT         (CASE
     WHEN (:myVar is null) THEN 0
     WHEN (:myVar is not null) THEN 1
     ELSE 2
    END) res
    from dual
END;


ce test me renvoi '0', ce qui est attendu. Le problème c'est que tester à null allonge mes temps de traitement (chose d ailleurs que je ne comprends pas mais passons). Donc j'ai voulu tester la chaine vide (j ai rajouté un autre test qu avant pour checker):

var myVar varchar2(20);
exec :myVar := '';

SELECT         (CASE
     WHEN (:myVar = '') THEN 0
     WHEN (not (:myVar = '')) THEN 1
     WHEN (:myVar != '') THEN 2
     ELSE 3
    END) res
    from dual
END;


Qui me renvoi à tous les coups '3' ... et veut donc dire que la chaine n est ni vide, ni non vide ...

Et si je met une valeur dans myVar (
exec :myVar := 'val'; 
) , je récupère toujours 3.

J ai modifié le fonctionnement pour faire autrement, mais quelqu'un peut il m expliquer le pourquoi? car là je ne vois pas.

merci d avance.

Naga
A voir également:

1 réponse

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 252
21 nov. 2016 à 13:46
Ah et pour checker j ai rajouté le when :

WHEN ('' = '') THEN 0


qui ne fonctionne pas non plus ... je ne comprends pas ce qu il se passe en bg..
0