我正在使用 IF 条件来检查 2 个值是否相等。在一种情况下,我使用的所有值都是 NULL,但它无法识别它们是否相等。
IF training_event_rec_.training_fee = course_rec_.course_fee AND training_event_rec_.training_fee_unit = course_rec_.course_fee_unit AND training_event_rec_.currency = course_rec_.currency AND training_evaluation_temp_ = course_evaluation_temp_ THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
在这里,所有比较的变量都是空的,但它总是命中 ELSE 部分。 在这种情况下,我如何比较值。
use IS NULL:
IF (training_event_rec_.training_fee = course_rec_.course_fee OR
(training_event_rec_.training_fee IS NULL AND course_rec_.course_fee IS NULL))
AND (training_event_rec_.training_fee_unit = course_rec_.course_fee_unit OR
(training_event_rec_.training_fee_unit IS NULL AND course_rec_.course_fee_unit IS NULL))
AND (training_event_rec_.currency = course_rec_.currency OR
(training_event_rec_.currency IS NULL AND course_rec_.currency IS NULL))
AND (training_evaluation_temp_ = course_evaluation_temp_ OR
(training_evaluation_temp_ IS NULL AND course_evaluation_temp_ IS NULL))
THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
注意:
- 你也可以比较像NVL(COLUMN_A,'X'(=NVL(COLUMN_B,'X'(这样的空值,只有当你确定COLUMN_A和COLUMN_B不会包含值'X'时。因此,不建议使用此方法。
我认为非空值和空值可能有不同的组合。一种选择是检查所有内容,或者 - 也许更简单 - 使用NVL
,例如:
IF nvl(training_event_rec_.training_fee, 0) = nvl(course_rec_.course_fee, 0)
AND nvl(training_event_rec_.training_fee_unit, 0) = nvl(course_rec_.course_fee_unit, 0)
AND nvl(training_event_rec_.currency, 0) = nvl(course_rec_.currency, 0)
AND nvl(training_evaluation_temp_, 0) = nvl(course_evaluation_temp_, 0)
THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
根据数据类型,您可能需要使用其他内容,而不是0
。例如,货币可能是美元或欧元或类似的东西,所以你会使用
nvl(training_event_rec_.currency, 'x')