HI,各位啊。
做如下的语句,感觉应该输出 is ok ,但是实际是 is not ok.不理解。忘解答。
还有我试了一下如果v_char VARCHAR2(20) 这样不赋值也是is not ok。我理解null没法和字符比较。但是赋予空值和null一样吗?为此我写了第二个程序。实际也是歇菜。null和空不一样。不仅如此,我还写了第三个也是歇菜。
DECLARE
v_char VARCHAR2(20):='';
BEGIN
IF v_char <> '1' THEN
dbms_output.put_line('is ok');
ELSE
dbms_output.put_line('is not ok');
END IF;
END;
---------------------------------------第二个
DECLARE
v_char VARCHAR2(20):='';
v_char2 VARCHAR2(20);
BEGIN
IF v_char = v_char THEN
dbms_output.put_line('is ok');
END IF;
END;
------------------------------------------第三个
DECLARE
v_char VARCHAR2(20):='';
BEGIN
IF v_char = v_char THEN
dbms_output.put_line('is ok');
END IF;
END;
在oracle中,判断一个字段或者一个变量是否为null 语法是 is null。返回的结果是boolean型。
null并不表示不存在,而是未知,等价于没有任何值、是未知数。
所以如果使用 = null,会返回null,是没有任何意义的。
所以针对你的几个测试
---------------------------------------第一个
DECLARE
v_char VARCHAR2(20):='';
BEGIN
IF v_char <> '1' THEN --> null值的判断等于不等于都是没有意义的
dbms_output.put_line('is ok');
ELSE
dbms_output.put_line('is not ok');
END IF;
END;
---------------------------------------第二个
DECLARE
v_char VARCHAR2(20):='';
v_char2 VARCHAR2(20);
BEGIN
IF v_char = v_char THEN --> 你应该是想用v_char = v_char2这样判断吧,同上,空和空是等于的是没有意义的
dbms_output.put_line('is ok');
END IF;
END;
------------------------------------------第三个
DECLARE
v_char VARCHAR2(20):='';
BEGIN
IF v_char = v_char THEN -->同上
dbms_output.put_line('is ok');
END IF;
END;