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!
Why is number value equals null value?
-
10-06-2023 - |
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?
Solution
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow