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