Tuesday, April 01, 2008 - 文章

ORACLE, 你把空字串怎麼了?

腦海中一直存著清晰的一幕,牙牙學語摸索SQL語法的青澀少年Jeffrey,端坐SQL大師Ryan的跟前,聽著諄諄教誨:

孩子,閉上眼晴,用原力去感受... 在SQL世界裡NULL具有獨特的魔力,VARCHAR欄位儲存著NULL或是空字串? 在意義上是絕對不同的...

後來在DB、Web領域打滾多年,我常常採行這項Schema設計理念:NULL代表使用者未曾輸入過任何資料,空字串則代表使用者輸入了,但未指定任何值。在SQL Server的世界裡,這條鐵律一直運行得很好,直到我遇到了ORACLE...

今天在寫一個動態的SQL複合條件查詢,為了簡化起見,用了以下的技巧:

SELECT SomeColumns....
FROM SomeTable
WHERE (:userId = '' OR UserIdCol = :userId)
AND SomeOtherCriteria...

我打的如意算盤是,如果userId傳入空字串,就不限定UserIdCol的值;否則就透過指定userId的方式,只傳回UserIdCol=:userId的結果。

 

測試了一下,將:userId參數設為空字串,理應列出所有的資料。很好!! 什麼都沒傳回來... orz

Debug了一下,才發現在ORACLE裡,根本沒有空字串這種東西,空字串會被視為NULL。因此,'' = ''等同於NULL = NULL,等於比對不會傳回True或False,而是傳回NULL。

接著,用Google找到相關說明。雖然違背了ANSI SQL 92的定義,但ORACLE的確會將空字串當作NULL處理,導致了非我預期的結果。

由於不能因為這點特性要求更換DataBase,山不轉路轉,路不轉人轉,上述的SQL語法要改寫成:

SELECT SomeColumns....
FROM SomeTable
WHERE (:userId IS NULL OR UserIdCol = :userId)
AND SomeOtherCriteria...

繼續幹活去!

更開放的國語辭典,教育部準備好了嗎?

今天在Jedi's Blog上看到兩篇文章(工欲善其事──談教育部國語辭典(上)工欲善其事──談教育部國語辭典(下)),提到了現行教育部國語辭典在授權上的不合理限制,心有戚戚焉...

大約四個月前,因為三隻小豬打炮的無聊風波,搞得國語辭典網站無預警關站檢修,耗了一個月,才又重新開放。在這一個月無辭典可用的日子裡,我遍尋相關資源,無意間也對教育部國語辭典的背景多了一層認識。這個用公帑所開發的國語辭典,尋遍Google,還真找不到任何在完整度及權威性上足以匹敵的其他線上服務。但很可惜,不知基於什麼理由,教育部為它設下了超嚴密的保護,只給IP,不設Domain Name,在網站上放連結要事先提出申請。如果你希望取回它的字典檔加以運用,嘿! 就更精彩了。說難不難,首先你心中所懷抱的必須是純學術研究、教育推廣且非商業性使用的神聖使命感(當然,任何銅臭都是不被允許),然後填寫一份申請書以證明意志堅決,最重要還要再將你的滿腔熱血化為具體可行、打動人心的資料檔使用計畫書,等到申請被核准後,就能取得資料檔案囉!

說老實話,我一直覺得國語辭典網站的查詢功能太陽春,很想加入Regular Expression的概念,寫一隻.NET WinForm程式分享給有需要的使用者,但要這麼做的先決條件是必須取得辭典資料檔。看到這麼"簡便"的申請程序,中年人僅有的幾匙熱血當場化做豬血糕... (誠如Jedi所言,用Script把整部辭典內容擷取回來並非難事,但限於授權,管你程式寫得再好,也只能在家裡關起門來自己爽。)

在國語辭典關站期間,我寫過兩次信到教育部部長信箱,出乎意料地,意見信箱的自動回覆、追蹤查詢等CRM機制相當齊全,回覆不但夠迅速也十分客氣有禮;然而,客氣歸客氣,問題仍是問題... 

既然電子檔不開放索取也不許流傳,那麼依附光碟版的檔案,想應用的人自行購買來解決版權爭議總行了吧? 嘿,不好意思,光碟片都賣完了 orz

我的想法很簡單:

國語辭典是累積諸多專家學者多年的心血結晶,從另一角度來看,也是政府投入預算執行而得的重大成果,資源閒置或未能充分運用便是人民血汗錢的浪費。而讓更多人精準地使用國語應是國語會無時無刻要貫徹的使命,既然都耗費了可觀的時間精力才完成這麼一部網路上所向無敵的鉅作(Internet上英文字典多如牛毛,國語辭典界卻只有這麼一盞明燈),教育部既不以此營利,又何苦花了設下重重障礙,阻礙國語辭典的流通與進一步應用? 難道是害怕國民的語文水準太高就會造反,還是擔心大家太會說國語阻礙了台灣的國際化? 我認為教育部至少應提供簡便的申請管道,讓國民能取得辭典電子檔自行開發一些有利國語文推廣的應用,而非設立令人生畏的重重關卡,阻礙資源的進一步運用。

Jedi在文中想像著有朝一日要發起「一人一信‧開放教育部辭典」的活動,身為重度國語辭典使用者的我已經身體力行了,剛才寫了幾封信給立法院教育委員會的立委大人們,希望他們在百忙中可以協助關心。

"我想不出有任何理由該剝奪我們分享這份教育推廣成果的權利,尤其當它是由全民納稅的血汗錢所催生的。"

如果你也有興趣與熱情加入推動"開放國語辭典"的行列,以下是一些途徑:

Posted 01 April 2008 02:09 AMJeffrey | 7 comment(s)
Filed under:

搜尋

Go

<April 2008>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
【工商服務】
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication