关于oracle中使用nvl函数时,对空字符串的理解
昨天下班之前在程序中遇到了一个使用nvl的sql语句,相信这个函数大家都应该使用过,并且应该是很简单的。
因为之前做的数据库移植时遇到过这个问题,所以今天拿来在这里记载一下。
其中有一段where条件是这样的:
and ((nvl('', ' ') <> ' ' and a.benifitvchno like '%%') or
(nvl('', ' ') = ' ' and a.benifitvchno like '%'))
以上是在plsql中打出的,基本上的意思就是如果a.benifitvchno是空值的话,下面的条件会成立,
如果有值的话上面的语句会成立。实际上在nvl后面的‘’中应该是那个a.benifitvchno的值,因为在这里是空,所以显示为‘’。
这里要着重说明的是oracle对于‘’的处理默认是null的,而‘ ’才是空字符串,(前面是‘’,后面是‘ ’,这里区别是后者中间有空格),所以就是这里是有区别的,因此如果将上面语句写为都是没有空格的‘’,结果肯定是不对的。
补充:今天在csdn上问了下,
可以使用以下语句实验:
(1)
select
1
from
dual
where
nvl(
''
,
''
)
=
''
(2)select
1 from
dual where
nvl('', '') is null
以上两句中第一句不会有值,第二句才会有值。
正像
wh62592855
朋友说的:null=null,返回应该是FALSE。只要记住NULL不等于任何值就是了,也不等于NULL。
特此非常感谢
wildwave,
wh62592855
两位朋友的解答。
相关文档:
本机电脑上有安装ORACLE10G的客户端,后来由于需要玩了一下ODAC,后来又卸载掉了。结果,使用C#进行连接的时候报:
未在本地计算机注册“OraOLEDB.Oracle.1”提供程序
然后,新建一个UDL进行测试,发现Oracle Provider & ......
源贴地址:http://topic.csdn.net/u/20090520/15/08a03d2e-a537-4c06-b79a-7e2f7ed5f898.html
1,
ASCII
返回与指定的字符对应的十进制数;
SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual;
A A ZERO SPACE
--------- --------- --------- ---------
65 97 48 32
2. CHR
......
回滚段用于对数据库修改时, 保存原有的数据, 以便稍后可以通过使用ROLLBACK来恢复到修改前的数据; 另外, 回滚段可以为数据库中的所有进程提供读一致性. 因此, 回滚段设置的合理与否, 直接影响到数据库的性能.
回滚段的维护及查询
(1) 创建回滚段
__CREATE ROLLBACK SEGMENT RB01
__TABLESPACE RBS1
__STORAGE (
____I ......
1.以sysdba身份進入
2.show parameter audit
3.alter system set audit_sys_operations = true scope = spfile
4.alter system set audit_trail = db,extended scope = spfile
5.startup force
6.show parameter audit
7.audit select table,insert table,delete ta ......