-
變量綁定
鎖定
select * from tab1 where col1=1;
select * from tab1 where col1=2;
對oracle數據庫來説,這是兩條完全不同的SQL,對這兩條語句都需要進行hard parse。因為oracle會根據sql語句的文本去計算每個字符在內存裏的hash值,因此雖然上述兩條SQL只有一個字符不一樣,oracle根據hash算法在內存中得到的hash地址就不一樣,所以oracle就會認為這是兩條完全不同的語句。而如果將上述SQL改寫成select * from tab1 where col1=:var1;,然後通過對變量var1的賦值去查詢,那麼oracle對這條語句第一次會進行hard parse,以後就只進行soft parse。假設某條語句被重複執行了幾十萬次,那麼使用bind var帶來的好處是巨大的。一個應用程序如果bind var使用不充分,那麼幾乎一定會伴隨着嚴重的性能問題。
- 中文名
- 變量綁定
- 外文名
- bind variable
- 相 對
- 文本變量
- 格 式
- 變量名:=變量值
- 類 型
- 計算機術語
變量綁定SQL語句實現
首先用var進行聲明,確定變量名及類型,再使用exec賦值。格式為“:變量名:=變量值”。“:=”為賦值符號,例如“SQL> exec :i:=:i+1;”。使用時通過“:變量名”方式調用。 例如: SQL> var i varchar2(10); SQL> exec :i:='sql'; SQL> select * fromtable_name where name=:i;
[2]
變量綁定Java編程實現
利用prepareStatement創建對象,結合使用setXXX 系列方法,可以為不同數據類型的綁定變量進行賦值。
在sql字符串中,使用“?”代替變量出現位置,並使用setString方法對“?”所在位置設置替換變量。
例如:
String var="1";
String sql="select *from table_name where ID =?";
Connection c = DriverManager.getConnection(dbUrl, user, key);
PreparedStatement p = c.prepareStatement(sql);
p.setString(1, var);
ResultSet r = p.executeQuery();
- 參考資料
-
- 1. oracle有效降低硬解析:綁定變量 .IT168技術開發頻道[引用日期2017-07-02]
- 2. 執行計劃 - Oracle謂詞越界與綁定變量窺探 .搜狐[引用日期2017-07-04]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:14次歷史版本
- 最近更新: 風吹过d街道