oracle的毛病!!
來源:互聯網
上載者:User
oracle
本文純為牢騷, 怨言。一為筆者對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版裡對此有了改進, 略感欣慰.