Question

I have following 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;

I want to copy a part from data of my_example_old to my_example and one part to my_example_assignment in cause of new Data Model. It works as expected but why the if statement:

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

is true in first loop??? T_example_nr and T_example_var are null and my_example_old.example_nr is something like 16433 (number(6)) and my_example_old.example_var is something like 3 (number(2))!?!?!

I cant understand this behavior! If i initilize T_example_nr and T_example_var with -1 for example its all fine and not equals.

Someone can explain me why this is handled as described?

Was it helpful?

Solution

I found some help in a oracle article. They are writing all comparison with null out of IS NULL or IS NOT NULL will end in status UNKNOWN. Thats why my Statement will go to else if i compare 15000 != null. It is not false and not true!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top