我有一个包含两个字段的表单,类型为Char 128,我试图比较这些字段的内容。但是我没有得到适当的比较。当两个字段具有相同的数据时,仍然表示两个字段都不匹配。
Begin
IF(LTRIM(RTRIM(:field1)) = LTRIM(RTRIM(:field2)))THEN
Show_Message('Fields Match');
ELSE
Show_Message('Fields DO NOT Match');
END IF;
End;
答案 0 :(得分:3)
问题如前所述,在Oracle中NULL不等于NULL。在Oracle中,与NULL的比较将始终为false。您可以使用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;
答案 1 :(得分:2)
如果表单字段为NULL,则相等比较将不起作用。您可以使用nvl函数替换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;