本文純?yōu)槔悟}, 怨言。一為筆者對Oracle軟件如此這般的迷惑與不滿,
二來其實可以總結(jié)ORACLE中的一些不規(guī)則性, 為ORACLE學習者提供一些借鑒..
1. 改變當前用戶時SQLPLUS環(huán)境變量的設置是否被繼續(xù)到新的用戶環(huán)境下
混亂, serverout 沒有被繼續(xù), 而pagesize被繼續(xù).
2. SQLPLUS環(huán)境下命令行編輯功能微弱得可憐, 看看readline, 看看MySQL
3. SQLPLUS環(huán)境的命令行沒有歷史記錄功能, 看看MySQL. gdb, bash
4. 命名規(guī)范混亂得一踏糊涂. user_tab_columns, user_con_constraints
user_tables, usre_cons_columns
5. SQLPLUS環(huán)境的初始化文件的location的要求, 看看.bashrc, .vimrc, .netrc
.emacs, .newsrc...摸一個都比它強, 我要使用你的login.sql還非得在每
一個當前目錄下都弄一份, 隨身攜帶呀? 好在這一點可以通過SQLPATH環(huán)境
變量的設置來搞定.
6. 注釋格式:--, 什么玩意呀, Html用, perl用#, php用#或/**/或
//, C用/**/, C++用/**/和//, lisp用;;, 匯編用;, QBASIC用rem 和',
SHELL,SED,AWK用#, 你干嗎要自創(chuàng)一種. 自以為很鳥啊, 與別人兼容一點會
小你什么身份.
7. 看看它的PL/SQL, 號稱第N代的高級語言, function因為必需返回一個值而
存在, 除此之外我看不出它與其它的PRocedure有什么區(qū)別. 又是trigger,
又是package, 又是procedure, 又是function, 搞什么東東呀. 別人是把
復雜的東西簡單化, 我看ORACLE是要把簡單的東西復雜化, 同樣是PL/SQL
程序, dbms_output.put_line被設計成在function里單獨調(diào)用時不能輸出.
非要一個procedure單獨調(diào)用它時它才會輸出.
8. 單引號問題, javascript可以兼容使用單雙引號, perl可以, php也可以, 它
們可以是因為它們想兼容, 想對用戶友好, C語言不答應, 那是因為它嚴謹.
人家留著有大用場. 你ORACLE不答應使用雙引號又是什么原由, 說來聽聽.
9. 別人的用戶界面設計是"沒有消息就是最好的消息", 或是"無論發(fā)生什么, 都
要讓用戶知道", 看看它在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] onoff的選項
注重, 它是severout, 你在sqlplus下set severout on試試,
SP2-0158: unknown SET option "severout" 了吧?
set serverout on
是的, 就一個字母而已.
編程大師說: 任何軟件都有BUG.
但, 一個如此小的BUG可以讓一個全球第二大的軟件公司帶著它走過幾個版本?
Oracle8.15 Oracle8.16 Oracle8.17...難道保留錯誤是為了兼容性?
后記: 我終于看到Oracle9i版里對此有了改進, 略感欣慰.