用Oracle繫結變數替代sql語句裡常量

2021-06-17 18:00:08 字數 1201 閱讀 6956

在實際相關應用操作過程中的具體操作中唯一能使得oracle 能重複的利用執行計畫的相關方法就是用繫結變數的方法。其實oracle繫結變數的實質就是用於替代sql語句中的常量的替代變數。

oracle 中,對於乙個提交的sql語句,存在兩種可選的解析過程, 一種叫做硬解析,一種叫做軟解析.

乙個硬解析需要經解析,制定執行路徑,優化訪問計畫等許多的步驟.硬解釋不僅僅耗費大量的cpu,更重要的是會佔據重要的們閂(latch)資源,嚴重的影響系統的規模的擴大(即限制了系統的並發行), 而且引起的問題不能通過增加記憶體條和cpu的數量來解決。

之所以這樣是因為門閂是為了順序訪問以及修改一些記憶體區域而設定的,這些記憶體區域是不能被同時修改。當乙個sql語句提交後,oracle 會首先檢查一下共享緩衝池(shared pool)裡有沒有與之完全相同的語句,如果有的話只須執行軟分析即可,否則就得進行硬分析。

而唯一使得oracle 能夠重複利用執行計畫的方法就是採用繫結變數。繫結變數的實質就是用於替代sql語句中的常量的替代變數。繫結變數能夠使得每次提交的sql語句都完全一樣。

繫結變數只是起到佔位的作用,同名的繫結變數並不意味著在它們是同樣的,在傳遞時要考慮的是傳遞的值與繫結變數出現順序的對位,而不是繫結變數的名稱。

create table t (a varchar2(20),b varchar2(20)); 

如何使用oracle繫結變數

declare  

v_sql varchar2(50);  

begin  

for i in 1..100000 loop  

v_sql := 

'insert into t values (:1,:2)'

;  execute immediate v_sql using 'a'||i,'b'||i;  

end loop;  

commit;  

end;  

/

清表

truncate table t; 

不使用繫結變數

declare  

begin  

for i in 1..100000 loop  

insert into t values ('a'||i,'b'||i);  

end loop;  

commit;  

end;  

/

oracle變數繫結

一 游標 游標可以理解為sql語句的乙個控制代碼,也叫sql語句的指標,游標指向一條sql語句,oracle會話要執行一條sql時,首先要開啟游標。二 sql解析的過程 硬解析步驟 1.對sql語句進行語法檢查,看是否有語法錯誤 2.通過資料字典,檢查sql語句中涉及的物件和列是否存在 3.檢查sq...

oracle 繫結變數

不太喜歡看到在procedure用 拼接sql的語句 所以貼了個繫結變數的例子,僅供參考 create or replace procedure using test t name nvarchar2 as v id char v char begin execute immediate selec...

Oracle 繫結變數用法

在oracle 中,對於乙個sql語句,存在兩種可選的解析過程,一種是硬解析,一種是軟解析.乙個硬解析需要經解析,制定執行路徑,優化訪問計畫等許多的步驟.硬解釋不僅僅耗費大量的cpu,更重要的是會佔據重要的們閂資源,嚴重影響了系統的併發效率。當乙個sql語句提交後,oracle會首先檢查一下共享緩衝...