本文純為牢騷, 怨言。一為筆者對oracle軟件如此這般的疑惑與不滿,
二來其實可以總結oracle中的一些不規則性, 為oracle學習者提供一些借鑒..
1. 改變當前用戶時sqlplus環境變量的設置是否被繼承到新的用戶環境下
混亂, serverout 沒有被繼承, 而pagesize被繼承.
2. sqlplus環境下命令行編輯功能微弱得可憐, 看看readline, 看看mysql
3. sqlplus環境的命令行沒有歷史記錄功能, 看看mysql. gdb, bash
4. 命名規范混亂得一踏糊涂. user_tab_columns, user_con_constraints
user_tables, usre_cons_columns
5. sqlplus環境的初始化文件的location的要求, 看看.bashrc, .vimrc, .netrc
.emacs, .newsrc...摸一個都比它強, 我要使用你的login.sql還非得在每
一個當前目錄下都弄一份, 隨身攜帶呀? 好在這一點可以通過sqlpath環境
變量的設置來搞定.
6. 注釋格式:--, 什么玩意呀, html用, perl用#, php用#或/**/或
//, c用/**/, c++用/**/和//, lisp用;;, 匯編用;, qbasic用rem 和',
shell,sed,awk用#, 你干嗎要自創一種. 自以為很鳥啊, 與別人兼容一點會
小你什么身份.
7. 看看它的pl/sql, 號稱第n代的高級語言, function因為必需返回一個值而
存在, 除此之外我看不出它與其它的procedure有什么區別. 又是trigger,
又是package, 又是procedure, 又是function, 搞什么東東呀. 別人是把
復雜的東西簡單化, 我看oracle是要把簡單的東西復雜化, 同樣是pl/sql
程序, dbms_output.put_line被設計成在function里單獨調用時不能輸出.
非要一個procedure單獨調用它時它才會輸出.
8. 單引號問題, javascript可以兼容使用單雙引號, perl可以, php也可以, 它
們可以是因為它們想兼容, 想對用戶友好, c語言不允許, 那是因為它嚴謹.
人家留著有大用場. 你oracle不允許使用雙引號又是什么原由, 說來聽聽.
9. 別人的用戶界面設計是"沒有消息就是最好的消息", 或是"無論發生什么, 都
要讓用戶知道", 看看它在sqlplus下的變量:
var i number;
i:=5;
print i;
你什么看見什么, 什么都沒有! 你又能從這知道什么, 好消息?
ps:我至今都不知道這說明了什么? i的值為null?, i不能在這下面賦值?
不能賦值你說呀, 你不說我怎么知道不能賦值, 雖然你很能有意見地顯示了
一個空行, 但是你還是要說呀, 你真的不能賦值嗎? 你不是真的不能賦值吧?
...
后記: 好在我今天知道了要用
sql> exec :i := 5;
sql> print :i
但總不能讓我掘地三尺才找得出來這些淺顯的東西吧.
10. 在sqlplus下help set看看, 找出一個叫set severout[put] on|off的選項
注意, 它是severout, 你在sqlplus下set severout on試試,
sp2-0158: unknown set option "severout" 了吧?
set serverout on
是的, 就一個字母而已.
編程大師說: 任何軟件都有bug.
但, 一個如此小的bug可以讓一個全球第二大的軟件公司帶著它走過幾個版本?
oracle8.15 oracle8.16 oracle8.17...難道保留錯誤是為了兼容性?
后記: 我終于看到oracle9i版里對此有了改進, 略感欣慰.