什麼是bind variable 繫結變數 ?

2021-04-16 22:16:15 字數 1048 閱讀 9057

查詢通常只是因為改變where子句中的內容而產生不同的結果。為了在這種情況下避免硬解析,需要使用繫結變數(bind variable)。它是使用者放入查詢中的佔位符,它會告訴oracle"我會隨後為這個變數提供乙個值,現在需要生成乙個方案,但我實際執行語句的時候,我會為您提**該使用的實際值"。

select * from emp where ename='king'; //不使用繫結變數

select * from emp where ename=:bv     //使用繫結變數

一般在 procedure or function 中使用,可以優化共享池的使用。

在語法分析期間,sql語句從使用者程序傳送到oracle,sql語句經語法分析後,sql語句本身與分析的資訊都被裝入到共享sql區。在該階段中,可以解決許多態別的錯誤。

語法分析分別執行下列操作:

l        翻譯sql語句,驗證它是合法的語句,即書寫正確

l        實現資料字典的查詢,以驗證是否符合表和列的定義

l        在所要求的物件上獲取語法分析鎖,使得在語句的語法分析過程中不改變這些物件的定義

l        驗證為訪問所涉及的模式物件所需的許可權是否滿足

l        決定此語句最佳的執行計畫

l        將它裝入共享sql區

l        對分布的語句來說,把語句的全部或部分路由到包含所涉及資料的遠端節點

以上任何一步出現錯誤,都將導致語句報錯,中止執行。

只有在共享池中不存在等價sql語句的情況下,才對sql語句作語法分析。在這種情況下,資料庫核心重新為該語句分配新的共享sql區,並對語句進行語法分析。進行語法分析需要耗費較多的資源,所以要盡量避免進行語法分析,這是優化的技巧之一。

語法分析階段包含了不管此語句將執行多少次,而只需分析一次的處理要求。oracle只對每個sql語句翻譯一次,在以後再次執行該語句時,只要該語句還在共享sql區中,就可以避免對該語句重新進行語法分析,也就是此時可以直接使用其對應的執行計畫對資料進行訪問。這主要是通過繫結變數(bind variable)實現的,也就是我們常說的共享sql

什麼是LVM 什麼是LV 什麼是VG

lvm logicl volume manager 邏輯卷管理器,通過使用邏輯卷管理器對硬碟儲存裝置進行管理,可以實現硬碟空間的動態劃分和調整。一 基本概念 1 物理卷 pv physical volume 物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬碟上的分割槽,也可以是整個物理硬碟。2 捲...

什麼是IaaS?什麼是PaaS?什麼是SaaS?

最近有朋友問我,什麼是iaas?什麼是paas?什麼是saas?他們又有什麼分別?其實,雲計算發展到今天,這些當年看似新穎的概念,已經快爛大街了,從業者早就對這些概念習以為常,但是圈外人卻依然是丈二和尚摸不著頭腦。今天我就來為圈外人士來解答一下,什麼是iaas,什麼是paas,什麼是saas。先來說...

什麼是Rup 什麼是xp 什麼是敏捷過程?

1 什麼是rup?rup rational unified process 是ibm rational software提出的軟體工程實施過程,在業界經歷了數千個軟體專案的實踐,是當前最為成功的軟體工程方 之一!rup是一種迭代的 以架構為中心 的 用例驅動的軟體開發方法 rup是一種具有明確定義和...