PLSQL - 查找两个值在为 NULL 时相等



我正在使用 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')

相关内容

  • 没有找到相关文章

最新更新