Chanel [K]

面朝大海,春暖花开

Archive for January, 2006

NVL, NVL2 or COALESCE?

with 5 comments

刚看完没什么感觉的春晚,闲来无事,再翻译一篇Eddie Awadblog

NVL, NVL2 or COALESCE?

跟别的RDBMS系统一样,Oracle中的空值(nulls)也应该被特殊对待。在Oracle中,有3个(也许更多?)函数可以用来处理空值,NVL, NVL2 和 COALESCE。我想要问你们一个问题,但是首先我自己得先温习一下。

NVL ( expr1 , expr2 )
如果expr1是空,那么NVL返回expr2。如果expr1不是空,那么NVL返回expr1。

NVL2 ( expr1 , expr2 , expr3 )
如果expr1是空,那么NVL2返回expr3。如果expr1不是空,那么NVL返回expr2。

COALESCE(expr[,expr]…)
返回参数列表中的第一个非空值。

当然我也可以使用CASE或者DECODE函数来处理空值。

下面左右的查询都返回相同的结果:

使用NVL:

  1. HR@XE> select nvl(commission_pct,0)
  2.   2  from employees
  3.   3  where commission_pct is null
  4.   4  and rownum = 1;
  5.  
  6. NVL(COMMISSION_PCT,0)
  7. ---------------------
  8.                     0

使用NVL2:

  1. HR@XE> select nvl2(commission_pct,commission_pct,0)
  2.   2  from employees
  3.   3  where commission_pct is null
  4.   4  and rownum = 1;
  5.  
  6. NVL2(COMMISSION_PCT,COMMISSION_PCT,0)
  7. -------------------------------------
  8.                                     0

使用COALESCE:

  1. HR@XE> select COALESCE(commission_pct,0)
  2.   2  from employees
  3.   3  where commission_pct is null
  4.   4  and rownum = 1;
  5.  
  6. COALESCE(COMMISSION_PCT,0)
  7. --------------------------
  8.                          0

使用CASE:

  1. HR@XE> select
  2.   2      case
  3.   3      when commission_pct is null then 0
  4.   4      else commission_pct
  5.   5      end commission_pct
  6.   6  from employees
  7.   7  where commission_pct is null
  8.   8  and rownum = 1;
  9.  
  10. COMMISSION_PCT
  11. --------------
  12.              0

使用DECODE:

  1. HR@XE> select
  2.   2     decode(commission_pct,null, 0,
  3.   3      commission_pct) commission_pct
  4.   4  from employees
  5.   5  where commission_pct is null
  6.   6  and rownum = 1;
  7.  
  8. COMMISSION_PCT
  9. --------------
  10.              0

我通常都是使用NVL函数来检查空值的,但是,看上去COALESCE函数更加普遍(可以检查多个参数)并且COALESCE是一个所有关系型数据库系统都支持的标准函数。

那么是不是我该改变一下自己使用NVL的习惯转而使用COALESCE呢?各位有什么建议?

请使用这个链接进行函数使用率的投票。

全文完

译者:实际上吸引我的倒不是这篇文章,因为它太简单,呵呵。但是Eddie在文章的最后有一个投票的界面,还挺美观的,按照链接进去看了一下,dPolls,一个很实用的网上投票系统,并且提供了脚本用以将投票界面显示在自己的网页中,看来个人中心越来越受到服务提供商的重视了,无论是Flickr, Del.icio.us, 还是Planzo都提供了这样的脚本,网络中各种服务对于特定用户的体验都允许集中到这个用户自己的网页上,是个很好的现象,对吧。

注册dPolls很简单,注册完毕以后可以创建自己的投票,创建完毕以后dPolls会给出一段代码,将这段代码粘贴在自己的文章中就OK了,下面是我模仿Eddie作的一个完全相同的函数使用率投票,只是show一下界面,大家不要在我这里投,请使用上面的那个Eddie创建的投票链接。


Create polls and vote for free. dPolls.com

Written by kamus

January 29th, 2006 at 2:08 am

Posted in Oracle RDBMS

Tagged with , ,

让我们都有化身吧

with 19 comments

这是一个体现自己的时代,所以让我们都有自己的化身(avatar)吧。

改进blog评论的10点建议中看到gravatar,觉得还挺有意思,尝试了一下。所谓avatar其实用大白话来说就是头像,而gravarar则是一个网站允许你通过邮箱地址来关联自己的avatar,这样以后在所有支持avatar的站点只要输入了自己的email,就自然会显示出自己的avatar。

首先我们在gravatar上注册一个账号,用自己最常用的信箱地址作为标识,比如我是一定会用自己的Gmail信箱了。注册之后会让你上传一个小图片,即使你上传得比较大,也会自动压缩为80*80的大小。

然后剩下的事儿,就都交给各个网站的admin了。比如在我的站点上,只要你发comment时输入了注册gravatar时使用的email地址,那么你的头像就会自动显示在comment的后面。是不是很有意思?

对于Wordpress来说,gravatar提供了插件,如果要稍微自己订制一下,可以去修改自己使用的theme中的comments.php文件。可惜我的HTML功力太差,不知道怎么才能改成像本文中截图的效果。

Written by kamus

January 27th, 2006 at 1:00 pm

Posted in Webs

Tagged with , ,

Firefox页面比IE更美观?

with 5 comments

以前一直以为Firefox中表现出来的页面在某些时候比IE会难看,但是由于喜欢Firefox的Open性,所以通常都是包容了。
这几天在楼下的网吧玩,偶尔用IE查看了一下自己的blog,才发现居然IE里面看上去跟Firefox不太一样呢。

首先是首字放大下沉的插件在Firefox的效果是这样的。

但是在IE里面却有些乱的感觉。

其次在侧边页面中添加的网页点击计数器在Firefox中显示的效果是这样的。

而在IE中却惨不忍睹,位置都没有对齐,奇怪的是我用的相同的代码,首页的侧边栏中这个计数器在IE里面是显示正常的,而点击进单独文章之后的页面侧边栏才会变成这个样子。我只能认为这是IE的问题了。

想不到我的blog居然有些Firefox-like了,以后是不是在自己的首页添上,为了更好的阅读体验请使用1024*768分辨率,并且请使用Firefox浏览器呢,哈哈。

话说回来,其实,现在大家都用RSS订阅了,谁还管你的页面到底长什么样子呢。比如Fenng的DBANotes,我天天看到他的文章,但是如果不是他自己说改版了,我可能很久都不会知道。Content is King! 这才是王道吧。

Written by kamus

January 25th, 2006 at 1:13 am

Posted in Apps

Tagged with ,