declare
str varchar(1);
begin
str:='h';
if str != '' then
DBMS_OUTPUT.PUT_LINE('hello world'||str);
else
DBMS_OUTPUT.PUT_LINE('ha ha NULL');
end if;
end;运行结果为:ha ha NULL
请帮忙解释一下原因或运行机制
str varchar(1);
begin
str:='h';
if str != '' then
DBMS_OUTPUT.PUT_LINE('hello world'||str);
else
DBMS_OUTPUT.PUT_LINE('ha ha NULL');
end if;
end;运行结果为:ha ha NULL
请帮忙解释一下原因或运行机制
因为任何与null的运算结果都为null,也就是说表达式
str != '' 在运算时为了类型匹配,先把''隐式转换成null,然后再与str进行比较运算,也就是 str != null,
毫无疑问,运算的的结果是 null,而不是true.
所以流程转到
else
DBMS_OUTPUT.PUT_LINE('ha ha NULL'); 而char就不一样了,''就是'',不是null,楼主可以试试。
爱好oracle,共同学习。
参考:
http://blog.csdn.net/truexf/archive/2007/10/12/1820977.aspx
我也测试了一下。应该是oracle把空字符串认为是null,与varchar 或char没关系。