2013-05-14 4 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

+0

Я собираюсь попробовать и сообщить вам оооп, я забыл точку с запятой – devdar

+2

Дайте сообщение от: field1 и: field2 перед оператором if. Если поля пустые, это сравнение не будет работать – nightfox79

ответ

3

Проблема, как уже говорилось, что в Oracle NULL не равен NULL. В 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 заменить NULLs

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; 
Смежные вопросы