Oracle Count 函数的实验

以下一点小经验,希望对你们有所帮助。

在做项目的时候,有修改到的procedure中写了类似这样一句
SELECT COUNT (b.PLANRMK) INTO varplantmkcount FROM smtbcrud b WHERE …
If varplantmkcount > 0
SELECT b.PLANRMK into varplantmk FROM smtbcrud b WHERE …
If varplantmk is null

End If;
End If;
本意是想如果smtbcrud里面如果找到了匹配的行的话才继续做If里面的东西,而我的If里面做的是判断如果PLANRMK为空的话则update为*.
用意很简单,但是却出现了问题,PLANRMK 为空的话update不了。
大家可以试一下,如果TableA的栏位a的值全部为Null的话,大家用这句Sql试一下:
select count(a) from TableA
结果是多少?TableA的行数(我以前是这样认为的)?错了,结果为0.
原来Count会忽略null的行。
可以再试一个例子,还是TableA的栏位a, 除了一行是有值之外,其他行都是为Null,再用这句Sql:
select count(a) from TableA
想必大家都知道结果了,结果为1,Null的行被忽略掉了。
怎么解决?用select(PK),select count(*),select count(1)或者select(not null column)代替就好了。
当然这些方式在效率上会有一点点差异,但如果不是数据量很大的话,基本上我们可以忽略。如果有可能数据量很大的话,我的愚见是select(PK)>select count(*)>select count(1)>select(not null column), 大家可以上网找一些资料,或者自己做一些测试。
当然你硬要用这个栏位的话,又想不忽略null行的话,你可以试一下
select count(nvl(a,0)) from TableA

猜你喜欢

转载自blog.csdn.net/tt07406/article/details/82084626
今日推荐