我有以下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_nr
和T_example_var
为空,my_example_old.example_nr
类似于16433(数字(6))和{{ 1}}就像3(数字(2))!?!?!
我无法理解这种行为!如果我用-1初始化my_example_old.example_var
和T_example_nr
,例如它的所有罚款而不是等于。
有人可以解释为什么按照描述处理这个问题?
答案 0 :(得分:0)
我在oracle文章中找到了一些帮助。他们正在使用IS NULL写入所有与null的比较,或者IS NOT NULL将以UNKNOWN状态结束。这就是为什么我的声明将转到其他如果我比较15000!= null。这不是假的,不是真的!