2013-05-14 66 views
1

我有两个字段类型为Char 128的表单,我试图比较这些字段的内容。但是我没有做出适当的比较。当两个字段具有相同的数据时,仍然表示这两个字段不匹配。Oracle Forms 6i比较字段

Begin 

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

End; 
+1

如果将内容添加到消息中,内容如何显示? 'Show_Message('Fields Match')'后面的分号是可选的,不是吗? – Trinimon 2013-05-14 18:36:26

+0

我会尝试它,让你知道ooops我忘了分号 – devdar 2013-05-14 18:42:50

+2

在if语句之前给出来自:field1和:field2的消息。 如果字段为空,这种比较是行不通的 – nightfox79 2013-05-14 19:55:58

回答

3

问题是因为已经指出,在甲骨文空不等于空。在Oracle中,与NULL的比较总是错误的。你可以使用NVL解决这个问题,但是在这种情况下,我应该更喜欢使用IS NULL,就像这样:

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

如果表单字段为NULL,则相等比较将不起作用。您可以使用nvl功能来代替空值

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;