2013-05-14 3 views
1

J'ai un formulaire avec deux champs qui sont de type Char 128 chacun, j'essaie de comparer le contenu de ces champs. Cependant, je ne fais pas une comparaison appropriée. Lorsque les deux champs ont les mêmes données, les deux champs ne correspondent pas.Oracle Forms 6i Comparaison de champs

Begin 

IF(LTRIM(RTRIM(:field1)) = LTRIM(RTRIM(:field2)))THEN 
Show_Message('Fields Match'); 
ELSE 
Show_Message('Fields DO NOT Match'); 
END IF; 

End; 
+1

Comment le contenu ressemble-t-il si vous l'ajoutez au message? Le point-virgule était facultatif après 'Show_Message ('Fields Match')', n'est ce pas? – Trinimon

+0

je vais l'essayer et vous faire savoir ooops j'ai oublié le point-virgule – devdar

+2

Donner un message de: field1 et: field2 avant l'instruction if. Si les champs sont vides cette comparaison ne fonctionnera pas – nightfox79

Répondre

3

Le problème est comme déjà dit que, dans Oracle NULL est pas égal à NULL. Dans Oracle, une comparaison avec NULL sera toujours fausse. Vous pouvez contourner cela en utilisant NVL mais dans ce cas, je préfèrerais utiliser IS NULL comme quelque chose comme ceci:

Begin 

    IF (LTRIM(RTRIM(:field1)) = LTRIM(RTRIM(:field2))) 
    OR (:field1 IS NULL AND :field2 IS NULL) THEN 
    Show_Message('Fields Match'); 

    ELSE 
    Show_Message('Fields DO NOT Match'); 

    END IF; 

End; 
2

Si les champs de formulaire sont NULL, la comparaison d'égalité ne fonctionnera pas. Vous pouvez utiliser la fonction nvl pour remplacer les valeurs NULL

Begin 

IF(LTRIM(RTRIM(nvl(:field1,'*@#')) = LTRIM(RTRIM(nvl(:field2,'*@#'))))THEN 
Show_Message('Fields Match'); 
ELSE 
Show_Message('Fields DO NOT Match'); 
END IF; 

End; 
Questions connexes