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
请帮忙解释一下原因或运行机制
解决方案 »
- 请问在ORACLE中是否可以直接读取EXECL文件
- 求大家帮个忙,我要学习oracle
- 请教sql,有没其他写法
- dblink insert数据到remote,varchar2型的字段,丢失.
- 怎么在oracle中插入大于4000的字符串?
- 存储过程编译出错,请大家帮忙看一下!
- []200分[]在oracle中用分布式有什么好处?在什么情况下必须使用?????分布式包含那些方面???
- 在windows2003下安装oracle9i就是装不上呀
- oas 配置问题?急!!!
- 8i 在 P4上如何装?在线等待,急,急,急,急,急,急,急,急,急,急!!!!
- 如何设置游标的初始位置
- 请问:利用imp当中的哪些辅助命令,实现导入一个通过exp命令备份出来dmp文件,导入后覆盖现有数据的命令
因为任何与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没关系。