为什么数值等于空值?

时间:2014-03-06 14:50:11

标签: oracle plsql plsqldeveloper

我有以下teststatement:

DECLARE

  CURSOR cur_my_example_old IS
    SELECT meo.*
      FROM my_example_old meo
     ORDER BY meo.example_nr, meo.example_var;

  R_my_example_old        my_example_old%ROWTYPE;
  R_my_example            my_example%ROWTYPE;
  R_my_example_assignment my_example_assignment%ROWTYPE;

  T_example_nr  my_example.muster_nr%TYPE;
  T_example_var my_example.muster_var%TYPE;
BEGIN

  FOR R_my_example_old IN cur_my_example_old LOOP

    BEGIN

      IF my_example_old.example_nr != T_example_nr OR
         my_example_old.example_var != T_example_var THEN

        R_my_example.example_nr          := my_example_old.example_nr;
        R_my_example.example_var         := my_example_old.example_var;

        R_my_example_assignment.example_nr          := my_example_old.example_nr;
        R_my_example_assignment.example_var         := my_example_old.example_var;
        R_my_example_assignment.example_nr_2        := my_example_old.example_nr_2;
        R_my_example_assignment.example_var_2       := my_example_old.example_var_2;

        INSERT INTO my_example VALUES R_my_example;
        INSERT INTO my_example_assignmentVALUES R_my_example_assignment;

      ELSE

        R_my_example_assignment.example_nr     := my_example_old.example_nr;
        R_my_example_assignment.example_var    := my_example_old.example_var;
        R_my_example_assignment.example_nr_2   := my_example_old.example_nr_2;
        R_my_example_assignment.example_var_2  := my_example_old.example_var_2;

        INSERT INTO my_example_assignment VALUES R_my_example_assignment;

      END IF;

      T_example_nr  := my_example_old.example_nr;
      T_example_var := my_example_old.example_var;

    END;

  END LOOP;

END;

我想将my_example_old的数据中的一部分复制到my_example,将一部分复制到my_example_assignment,导致新的数据模型。它按预期工作,但为什么if语句:

  IF my_example_old.example_nr != T_example_nr OR
     my_example_old.example_var != T_example_var THEN

在第一个循环中为真??? T_example_nrT_example_var为空,my_example_old.example_nr类似于16433(数字(6))和{{ 1}}就像3(数字(2))!?!?!

我无法理解这种行为!如果我用-1初始化my_example_old.example_varT_example_nr,例如它的所有罚款而不是等于。

有人可以解释为什么按照描述处理这个问题?

1 个答案:

答案 0 :(得分:0)

我在oracle文章中找到了一些帮助。他们正在使用IS NULL写入所有与null的比较,或者IS NOT NULL将以UNKNOWN状态结束。这就是为什么我的声明将转到其他如果我比较15000!= null。这不是假的,不是真的!