2014-03-06 2 views
0

는 :숫자 값이 null 값과 같은 이유는 무엇입니까? 내가 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_assignment하는 my_example하는 my_example_old의 데이터를 한 부분에서 일부를 복사 할. 그것은 예상되지만으로 작동하는 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은 null이고 my_example_old.example_nr은 16433 (숫자 (6))이고 my_example_old.example_var은 3 (number (2))!?!?!

이 동작을 이해할 수 없습니다! 예를 들어, T_example_nrT_example_var을 -1로 초기화하면 해당 값은 모두 같고 같지 않습니다.

설명 된 것처럼 이것이 왜 처리되는지 누군가가 설명 할 수 있습니까?

+0

일어날 수 없습니다! 'number! = NULL'은 항상'false'입니다.'IF' 안에'dbms_output.put_line()'을 추가 했습니까? 실제로 출력했는지 확인하고 싶습니다. –

답변

0

오라클 기사에서 도움을 얻었습니다. 그들은 IS NULL에서 널 (null)과의 모든 비교를 쓰거나 NULL이 아닌 것이 UNKNOWN 상태로 종료합니다. 15000을 비교하면 내 계산서가 다른 곳으로 갈 것입니다. = null. 거짓이 아니며 사실이 아닙니다!

+0

'선언 함 mu1 number; mu2 number; begin mu1! = mu2이면 dbms_output.put_line ('I Am Am'); else dbms_output.put_line ('나는 누구인가?); end if; 끝; –