以讹传讹

早先时候,每每有人过来看我的机器,看完几个属性(CPU、内存),都会自觉不自觉地、好像很“嫉妒”一般地说上一句:“你的机器是部里边除了几个头儿之外,配置最好的!”我心想这 256MB 的机器居然是公司里配置最好的机器,很是郁闷。

上星期公司做硬件配置记录时,我看了一下:先比了一下内存,最低的是 256MB,只有一个和我一起来的女生和我一样用 256MB;而且她的 CPU 是 Intel 奔腾,我的是赛扬,虽然同样频率但她的好像也比我的好。再看看别人的,不说头儿们,任何一个人的配置都比我们两个人的高,起码 512MB 的内存,还有几个 G 内存的。这样说来,我用的是部里面配置最“差”的机器! (这里我没有任何嫉妒或抱怨的成分在,只是为了引出下文。)

这似乎应该是个“以讹传讹”的问题了。开始有人这么说,然后就有人跟着这么说,再然后说的人越多,跟风的也就越多……鲁迅说的话是“众口铄金,积毁销骨”(言重了点~)

最近在看 Oracle,这个大东西,以我程序员的角度,没发现它到底好在哪里?

  • 非常能“吃”内存,一般要见一半吃一半,256MB 的要用 130MB;朋友公司的,4GB 要用 1.9GB。Oracle 一开,机器慢吞吞的如“老牛拉破车”般。
  • 占用这么多资源,效率是否提高了?可能会提高吧,但对于我们一般的应用,有必要也占用这么多的资源来换取那点“看不出来”的效率提高呢?
  • 上面说的是“运行效率”,然后说“开发效率”。朋友的话是“用 Oracle 自己的东西作开发是非常困难而不方便的”,一般的 Oracle 老手都会首先给我推荐 PL/SQL Developer 这个第三方开发工具。
  • Oracle 的文档也是不敢恭维:没有中文的文档暂且不提,我看过一些 Oracle 数据库的在线文档,我不知道 Oracle 的开发人员是怎么想出这么一套文档组织方式,(反正我觉得他们的思维方式极其独特),找东西特别困难,例子少,而且好像刻意回避一样,想找的东西它总是不明说。

前些时候设计数据库一个表时,我和组里一个作 Oracle 很久的人争论是否用 date 类型表示一个时间的字段,他坚持要使用 nvarchar2 之类的字符类型而不用 date,原因是因为“使用 date ,存储时是把字符转化为 date,取值时又需要把 date 转成字符输出”。因为当时我还没有深入研究过 Oracle,凭着 SQL Server 的经验,我觉得这样的解释似乎很荒唐、很可笑,为什么要这样呢?

我问了一些做 Oracle 开发的朋友,他们居然给了我一个几乎差不太多的回答:他们做开发时也是很少在 Oracle 中使用 date 字段,都用字符类型代替了。我决定试一试,因为我觉得既然 Oracle 设计了这种类型作字段类型,就应该可以使用……

我在 PL/SQL Develop 中调试、作试验,我写入以前在 SQL Server 中的 SQL 语句:

     INSERT INTO ... (............) VALUES (......., '2004-7-20 11:25:36', ....)         -- 此语句适用于SQL Server

居然出错了!我还以为,Oracle 的日期类型分隔符像 Access 那样是 #,我又试了:

     INSERT INTO ... (............) VALUES (......., #2004-7-20 11:25:36#, ....)      -- 此语句适用于MS Access

还是错误。……我去查网上的文章,很多地方都是这么写的:

    INSERT INTO ... (............) VALUES (......., TO_DATE('2004-7-20 11:25:36', 'yyyy-mm-dd hh24:mi:ss'), ....)

哦,TO_DATE、TO_CHAR,我总算知道同事是什么意思了。这样的 SQL 句子写起来确实不怎么好。我想找个简单的方法。我想到了 Oracle 的文档,我“闯”进了 Oracle 的在线文档,找了起来……它好像刻意在回避这个问题,只是说有这个 date 类型,但就是不愿意多举一个例子,举一个怎样输入、输出日期类型数据的例子。终于看到了 TIMESTAMP 关键字,上面的 SQL 语句可以写成:

    INSERT INTO ... (............) VALUES (......., TIMESTAMP '2004-7-20 11:25:36', ....)

这里 TIMESTAMP 的文档也到此为止,还是不愿意多说一句,上面的日期格式支持哪些种?——真是“蜻蜓点水”般,“点到为止”。

很多人都说“Oracle 是最好的数据库系统”,这话或许也是在以讹传讹。至少对开发人员而言,是这样的。

 

后记:(2004-11-8 12:00)

《程序员》杂志的一期中刊登了我的这篇博客文章,饱受争议,甚至夹杂着人身攻击。很偶然地,在某站点看到了署名“jiangtao”对此事件的一则评论

关于程序员杂志上的文章,我想这次是个问题,主要是板块编辑对技术内容把握不严,我们会加强这方面的审读

这样看来,这篇文章可能已经给相关的某位编辑人员带来了一些不好的影响。在此特向他致以歉意!很抱歉给你带来了麻烦!

但这篇文章中表达的一些观点,我仍然认为是有价值的。Oracle 应当在易用性、文档本地化等方面做出更多的改变,才会使我改变观点。

难道你不觉得 Oracle 应该更简单一些吗?当然,也许你正因为 Oracle 的复杂性而拿着金饭碗呢!Oracle 的易用,将砸烂你们的饭碗?因为你的私心,就无法容忍我的声音?

posted on 2004-08-15 19:27  破宝  阅读(260)  评论(0编辑  收藏  举报

导航