編寫了n年的T-SQL,一回頭,發現這門語言居然缺少很多基本的類型。
1.枚舉
雖然枚舉看起來就是數字,但是枚舉比起數字來說更加好讀。mysql有enum,比如billtype(單據類型)把它定義爲枚舉,從而在編寫sql的時候更加方便。
mysql支持枚舉案例:
mysql> CREATE TABLE enum_test(
e ENUM('fish', 'apple', 'dog') NOT NULL
);
INSERT INTO enum_test(e) VALUES('fish'), ('dog'), ('apple');
用字符串表達數字,並且和數字的效率一樣高,還可以做in操作,雖然不太完美,但是也在完美的路上了。更細節的,如果插入的不在規定範圍內,mysql會把它當成null處理,這點不太好。
比如我們常常會遇到這樣的代碼:
sql = @"select 0 buytotal,-(ifnull(sum(if(bill.vchtype in (34,6,66,28) ...";
如果支持枚舉的話,代碼應該類似:
sql = Foo(@"select 0 buytotal,-(ifnull(sum(if(dlya.vchtype in (vchtype.billsale,vchtype.billbuy) ...";
感覺就會好很多了。
可是 Sqlserver 只能用int來代替。
2. 布爾類型
無論列定義,還是TSQL變量,參數,都不支持bool類型,智能用bit模擬。顯然1/0,不如 true/false 更好閱讀和使用。
3. 數組
Sql2008 有表變量的支持,聊勝於無。 數組,多常用的類型!
4. 類(class)
儘管類比一般的類型要複雜的多,可是類依然是類型。sqlserver也是沒有這樣的類型的。
以我們的產品爲例,動則幾百個存儲過程,這樣的複雜度,當然就有了分層和封裝的需求。可是sqlserver並不能很好的支持我們的想法。再說定義聚集函數這樣的特殊功能,用oracle,就採用sql就可以做到——因爲它支持類和包。在sqlserver,mysql要做這樣的聚集函數,都必須用dll,麻煩啊。
人的適應能力真強,想起剛剛用php之類的語言,連調試器也沒有,用print一路的也過來了。不過畢竟過的不爽。
注:oracle方面的內容都是來自資料,自己並無親自測試。