標籤:plsql
綁定變數(bind variable)我們經常在寫plsql中用到,那我們承接上一節的來看看在plsql中靜態sql和動態sql在綁定變數的區別
declare v_value_a varchar2(100); v_value_b varchar2(100); v_name varchar2(50);begin v_value_a := ‘SMITH‘; select e.ename/*+test*/into v_name from scott.emp e where e.ename = v_value_a; v_value_b := ‘ALLEN‘; select e.ename/*+test*/into v_name from scott.emp e where e.ename = v_value_b;end;/
查詢v$sql
select * from v$sql d where d.SQL_TEXT like ‘%/*+test*/%‘;
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/87/30/wKiom1fWwtfzvdAuAABUe2R8PL4069.png-wh_500x0-wm_3-wmp_4-s_212433948.png" title="QQ20160912225920.png" alt="wKiom1fWwtfzvdAuAABUe2R8PL4069.png-wh_50" />
這裡看到只產生了一條sql_id,oracle會自動把變數v_value_a,v_value_b換成綁定變數:B1.
再來看看動態sql
PLSQL_1:declare v_value_a varchar2(100); v_value_b varchar2(100); v_name varchar2(50);begin v_value_a := ‘SMITH‘; v_value_b := ‘ALLEN‘; execute immediate ‘select e.ename/*+sql*/ from scott.emp e where e.ename = :xxx‘ using v_value_a; execute immediate ‘select e.ename/*+sql*/ from scott.emp e where e.ename = :yyy‘ using v_value_b;end;/
查詢v$sql
select * from v$sql d where d.SQL_TEXT like ‘%/*+sql*/%‘;
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/87/30/wKiom1fWxH_RXDQdAACPRV8qgI0965.png-wh_500x0-wm_3-wmp_4-s_1077068967.png" title="QQ20160912225920.png" alt="wKiom1fWxH_RXDQdAACPRV8qgI0965.png-wh_50" />
這裡可以看到動態sql就是以執行sql為文本進行解析的,如果兩個sql有不同就是不同的sql語句。
2.擷取綁定變數的值
那我們可以得到綁定的變數的值嗎?通過v$sql_bind_capture就可以查詢到
SQL_1:select d.NAME, d.POSITION, d.SQL_ID, value_string from v$sql_bind_capture d where d.SQL_ID in (select sql_id from v$sql v where v.SQL_TEXT like ‘%/*+sql*/%‘)
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/87/D2/wKioL1fidubQRzHdAAB3vUyhBUs165.png-wh_500x0-wm_3-wmp_4-s_898096665.png" title="QQ20160921200158.png" alt="wKioL1fidubQRzHdAAB3vUyhBUs165.png-wh_50" />
這時我們看到綁定變數的值是上文看到的v_value_a和v_value_b的值。
接著往下走,改變v_value_a的值:
v_value_a := ‘CLARK‘;
執行PLSQL_1,SQL_1
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/87/D2/wKioL1fieRnyhxdeAAB00-JZ78c283.png-wh_500x0-wm_3-wmp_4-s_192305743.png" title="QQ20160921201159.png" alt="wKioL1fieRnyhxdeAAB00-JZ78c283.png-wh_50" />
綁定變數的值並沒有發生變化,這時為什麼呢?
本文出自 “11768293” 部落格,請務必保留此出處http://11778293.blog.51cto.com/11768293/1855156
Oracle之綁定變數 2