資源描述:
《PLSQL綁定變量用法小結(jié).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、之前對(duì)ORACLE中的變量一直沒個(gè)太清楚的認(rèn)識(shí),比如說使用:、&、&&、DEIFINE、VARIABLE……等等。今天正好閑下來,上網(wǎng)搜了搜相關(guān)的文章,匯總了一下,貼在這里,方便學(xué)習(xí)。?==================================================================================??在oracle中,對(duì)于一個(gè)提交的sql語句,存在兩種可選的解析過程,一種叫做硬解析,一種叫做軟解析.一個(gè)硬解析需要經(jīng)解析,制定執(zhí)行路徑,優(yōu)化訪問計(jì)劃等許多的步
2、驟.硬解釋不僅僅耗費(fèi)大量的cpu,更重要的是會(huì)占據(jù)重要的們閂(latch)資源,嚴(yán)重的影響系統(tǒng)的規(guī)模的擴(kuò)大(即限制了系統(tǒng)的并發(fā)行),而且引起的問題不能通過增加內(nèi)存條和cpu的數(shù)量來解決。之所以這樣是因?yàn)殚T閂是為了順序訪問以及修改一些內(nèi)存區(qū)域而設(shè)置的,這些內(nèi)存區(qū)域是不能被同時(shí)修改。當(dāng)一個(gè)sql語句提交后,oracle會(huì)首先檢查一下共享緩沖池(sharedpool)里有沒有與之完全相同的語句,如果有的話只須執(zhí)行軟分析即可,否則就得進(jìn)行硬分析。?而唯一使得oracle能夠重復(fù)利用執(zhí)行計(jì)劃的方法就是采用綁定變量。綁
3、定變量的實(shí)質(zhì)就是用于替代sql語句中的常量的替代變量。綁定變量能夠使得每次提交的sql語句都完全一樣。?1.sqlplus中如何使用綁定變量,可以通過variable來定義[c-sharp]viewplaincopyprint?1.SQL>?select?*?from?tt?where?id=1;??2.??3.ID?NAME??4.----------?----------------------------------------??5.1?test??6.??7.SQL>?select?*?from?
4、tt?where?id=2;??8.??9.ID?NAME??10.----------?----------------------------------------??11.2?test??12.??13.SQL>?variable?i?number;??14.SQL>?exec?:i?:=1;??15.??16.PL/SQL?過程已成功完成。??17.??18.SQL>?select?*from?tt?where?id=:i;??19.??20.ID?NAME??21.----------?----
5、------------------------------------??22.1?test??1.??2.SQL>?exec?:i?:=2;??3.??4.PL/SQL?過程已成功完成。??5.??6.SQL>?select?*from?tt?where?id=:i;??7.??8.ID?NAME??9.----------?----------------------------------------??10.2?test??11.??12.SQL>?print?i;??13.??14.I??15.
6、----------??16.2??17.??18.SQL>?select?sql_text,parse_calls?from?v$sql?where?sql_text?like?'select?*?from?t??19.t?where?id=%';??20.??21.SQL_TEXT?PARSE_CALLS??22.------------------------------------------------------------?-----------??23.select?*?from?tt?wh
7、ere?id=2?1??24.select?*?from?tt?where?id=1?1??25.select?*?from?tt?where?id=:i?2??26.SQL>??從上面試驗(yàn)發(fā)現(xiàn)綁定變量i的使用使查詢id=1和id=2的sqlselect*fromttwhereid=:i得以重復(fù)使用,從而避免了hardparse,這里的PARSE_CALLS=2包括了一次softparse2.前兩天看到有人在pub上問在sqlplus中通過define和variable定義的變量的區(qū)別。其實(shí)define定義
8、的我理解不是變量而是字符常量,通過define定義之后,在通過&或者&&引用的時(shí)候不需要輸入了,僅此而已。oracle在執(zhí)行的時(shí)候自動(dòng)用值進(jìn)行了替換;而variable定義的是綁定變量,上面已經(jīng)提到。[c-sharp]viewplaincopyprint?1.C:>sqlplus?xys/manager??2.SQL*Plus:?Release?11.1.0.6.0?-?Production?on?星期二?4月?