Oracle--養(yǎng)生之道
2024-08-29 13:38:36
供稿:網(wǎng)友
 
             
  ——駁《Oracle--毛病篇》
  
  前言:
  
  “師者,所以傳道授業(yè)解惑也 。”
  首先,無(wú)論是作者的怨言還是切身感受,無(wú)論是早期的想法還是執(zhí)著至今,我們今日權(quán)當(dāng)技術(shù)探討,為曾經(jīng)迷惑或即將迷惑的人提供參考。
                                                                                              我與前文作者小趙素未謀面,但為其在技術(shù)領(lǐng)域的專注而感動(dòng),故落筆揮墨,簡(jiǎn)單處一帶而過(guò)。
  
  以下題號(hào)相同,可以與上篇文章同閱,不再贅述。
  1、SQLPLUS只是一個(gè)客戶端軟件,不要指望它會(huì)繼續(xù)什么,不用說(shuō)serverout、pagesize,就是修改了時(shí)間顯示格式,也不能被其他用戶繼續(xù),這正是基于session的好處啊。當(dāng)然,假如你愿意永久修改些什么,可以通過(guò)修改數(shù)據(jù)字典、配置文件或注冊(cè)表完成。
  2、命令行編輯功能?
  ORACLE調(diào)整的是緩沖區(qū),EDIT可以實(shí)現(xiàn)大部分,好的治理員仍然以.SQL的腳本為主,單獨(dú)的命令行少用為妙。雖然我對(duì)SQL PLUS的設(shè)計(jì)也沒(méi)什么好感,但也覺(jué)得沒(méi)必要棄一豹而爭(zhēng)一斑。
  3、SQLPLUS環(huán)境的命令行沒(méi)有歷史記錄功能?
  SQLPLUS現(xiàn)在有兩個(gè)版本,(以WIN2K為例)我們假如用圖形界面的SQLPLUS,其實(shí)對(duì)應(yīng)的是SQLPLUSW.EXE;而如用SQLPLUS.EXE,利用系統(tǒng)的功能,是可以實(shí)現(xiàn)DOSKEY功能的。
  4、命名規(guī)范混亂得一踏糊涂?
  user_tab_columns, user_con_constraints,user_tables, usre_cons_columns。很有規(guī)則嘛,不要帶著過(guò)去數(shù)據(jù)庫(kù)的抵觸情緒去理解ORACLE,我也是SQLSERVER、MySQL、POSTSQL的開(kāi)發(fā)者,所以我們要著重體會(huì)數(shù)據(jù)庫(kù)思想的精髓,求同存異,這才有利于自身發(fā)展,也不至于為瑣事煩惱。
  5、作者已經(jīng)相通了。
  6、注釋格式:--, 什么玩意呀?
  我覺(jué)得你有必要與ANSI組織聯(lián)系一下,SQL92標(biāo)準(zhǔn)的衍生物,問(wèn)問(wèn)微軟是怎么干的?
  7、PLSQL獨(dú)樹(shù)一幟?
  PL/SQL沒(méi)有號(hào)稱第N代的高級(jí)語(yǔ)言,第四代打住了,SQL就決定了。而ORACLE也很謙虛,PL-PROCEDURE LANGUAGE,過(guò)程性語(yǔ)言,沒(méi)有說(shuō)編譯,沒(méi)有面向?qū)ο蟆V劣赿bms_output.put_line
    不能在FUNCTION中輸出,是誤解,過(guò)程可以CALL過(guò)程,因此過(guò)程中可以dbms_output.put_line,而函數(shù)可以RETURN,不會(huì)為開(kāi)發(fā)帶來(lái)困難。
  8、沒(méi)明白作者是說(shuō)單引號(hào)問(wèn)題還是雙引號(hào)問(wèn)題,不過(guò)拿語(yǔ)言和ORACLE相對(duì)比是不合適的,假如你說(shuō)java或C方便的實(shí)現(xiàn),那么可以用SQLJ或PRO*C編寫(xiě)過(guò)程。
  9、這是作者對(duì)知識(shí)點(diǎn)的混淆,也是沒(méi)有把握扎實(shí)PL/SQL,
  var i number;
    i:=5;
    此時(shí)I是一個(gè)PLSQL變量,要輸出,只能在PLSQL中輸出,如*.put_line輸出。
    :i := 5;
    此時(shí):i 是一SQLPLUS的外部變量,賦值和輸出,就是這種規(guī)則。
    很多時(shí)候不能想當(dāng)然,假如不想走彎路,不想掘地三尺,就要踏踏實(shí)實(shí)的讀些資料。
  10、我無(wú)話可說(shuō),為作者的苦心感動(dòng)。
  11、過(guò)程和函數(shù)的用法與PLSQL匿名塊的關(guān)系:
    過(guò)程的用法是要遵循各種數(shù)據(jù)庫(kù)的習(xí)慣的,如MSSQL。但PLSQL是ORACLE自己的語(yǔ)言,可以有更多的自由。規(guī)定如何用就如何用,尤其是語(yǔ)法,就看個(gè)人的適應(yīng)性了。唯一需要理解的是包,這是ORACLE有遠(yuǎn)見(jiàn)的一面,這里可以看到面向?qū)ο蟮暮圹E,類.方法,像吧,也為以后JAVA與PLSQL的協(xié)同工作打下了基礎(chǔ)。
  12、細(xì)心AND熟能生巧。
  13、我用PLSQL和SQLJ,對(duì)PRO*C不作評(píng)價(jià)。
  14、DDL語(yǔ)句是SQL92標(biāo)準(zhǔn)的,ADD COLUMN,不用COLUMN是因?yàn)槠渌麤](méi)有什么可以ADD,但DROP 必須加COLUMN,是因?yàn)榇艘ψ诌€可以是CONSTRAINT,ORALCE沒(méi)有錯(cuò)。
  15、又回到命名的問(wèn)題上了?
  ORACLE的命名取舍原則是:常用的對(duì)象名或列名要簡(jiǎn)單,很少使用的名稱要復(fù)雜,這是符合大多數(shù)人習(xí)慣的,尤其是ORACLE DBA,否則,一概而論反倒缺省人性化,為DBA造成沉重負(fù)擔(dān)。
  
  后話:
    肯定的說(shuō),作者的后話才是大徹大悟,說(shuō)出奮斗的感覺(jué)。每一種產(chǎn)品,都會(huì)有優(yōu)缺點(diǎn),不然怎么會(huì)有后人的聰明?“人類在一個(gè)fortran語(yǔ)言大行其道的年代就已經(jīng)登上了月球”,古人就知道善假于物也,我們可能不是愛(ài)因斯坦,但我們可以是牛頓,可以有眾多可以借鑒的肩膀。ORACLE博大精深,在于她的思想和數(shù)據(jù)庫(kù)的理論,不是虛張聲勢(shì)的外表。程序員不可多得,不是他學(xué)會(huì)多少語(yǔ)言。人是一個(gè)綜合體,要挖掘潛在的能量,就要從不同角度入手,找到最適合自己的開(kāi)發(fā)方式,使之終有一番作為。選擇,并不意味著放棄原有,數(shù)據(jù)庫(kù)如此,而勤奮和聰明,你又能舍棄哪一個(gè)呢?