久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么使用ORACLE中的綁定變量

共計(jì) 2568 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。

這篇文章主要講解了“怎么使用 ORACLE 中的綁定變量”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么使用 ORACLE 中的綁定變量”吧!

一、綁定變量的作用

:variable_name(字母,數(shù)字,或者字母數(shù)字組合)

有效降低硬解析

二、綁定變量的典型用法

sql 中

var x number;

exec :x :=7876;

select * from emp where empno = :x;

pl/sql 中,例如

declare

  vc_name varchar2(10);

 begin

    execute immediate select ename from emp where empno= :1 into vc_name using 7876;

    dbms_output.put_line(vc_name);

 end;

所以在 pl/sql 中綁定變量的標(biāo)準(zhǔn)語法為:

execute immediate【使用綁定變量的語句】  using 對(duì)應(yīng)綁定變量的具體輸入值;

PL/SQL 中 DML 語句的綁定變量典型用法

declare

 v_sql1  varchar2(50);

 v_sql2  varchar2(50);

 v_num1  number;

 v_num2  number;

begin

  v_sql1 := insert into emp(empno,ename,sal) values(:1,:1,:1)

  execute immediate v_sql1 using 8001, jack ,1000;

  v_num1 :=sql%rowcount;  –sql%rowcount 中的 sql 是 oracle 的內(nèi)部游標(biāo),rowcount 的意思是之前的 dml sql 語句影響的多少行數(shù)據(jù)

  execute immediate v_sql1 using 8002, mike ,2000;

  v_num2 :=sql%rowcount;

  dbms_output.put_line(v_num1+v_num2);

  end;

動(dòng)態(tài) sql 中也可以使用綁定變量,returning 這個(gè)關(guān)鍵字可以和帶綁定變量的 SQL 聯(lián)用,其作用是將受該 SQL 影響的行記錄字段取出來。

三、pl/sql 中批量綁定的典型用法

批量綁定:一次性處理一批數(shù)據(jù)

pl/sql 引擎是指在 Oracle 在數(shù)據(jù)庫中處理 pl/sql 代碼中除了 SQL 語句外所有剩余部分(如變量,循環(huán),數(shù)組,賦值)的子系統(tǒng)

批量綁定可以有效減少 SQL 引擎和 pl/sql 引擎的交互次數(shù)

理論上來說,pl/sql 中只要執(zhí)行 SQL 語句,就會(huì)有這兩個(gè)引擎的交互,實(shí)際上這兩個(gè)引擎交互產(chǎn)生的性能影響主要體現(xiàn)在以下兩個(gè)方面

1、當(dāng)顯式游標(biāo)或者參考游標(biāo)需要循環(huán)執(zhí)行 fetch 操作時(shí),這時(shí)循環(huán)由 pl/sql 執(zhí)行,fetch 中的 SQL 由 SQL 引擎執(zhí)行,這樣每 fetch 一條記錄,就需要兩個(gè)引擎交互一次

2、當(dāng)顯式游標(biāo)或者參考游標(biāo)的循環(huán)內(nèi)部需要執(zhí)行 SQL 語句,跟上面一樣,也是每執(zhí)行一次,需要交互一次

所以當(dāng) fetch 一批記錄,或者一次執(zhí)行一批 SQL,就會(huì)大大提高 pl/sql 的效率

批量 fetch 對(duì)應(yīng)的語法

fetch cursorname bulk colletc into【自定義的數(shù)組】limit cn_batch_size

pl/sql 中批量執(zhí)行一批 SQL 的語法

forall i in 1..[自定義數(shù)組長度】

  execute immediate [帶綁定變量的 sql] using [綁定變量輸入值】

declare

  cur_emp sys_refcursor;

  v_sql varchar2(4000);

  type namelist is table of varchar2(10);

  enames namelist;

  cn_batch_size constant pls_integer :=1000;

begin

  v_sql:= select ename from emp where empno :1

  open cur_emp for v_sql using 7900;

  loop

    fetch cur_emp bulk collect into enames limit cn_batch_size;

    for i in 1..enames.count loop

      dbms_output.put_line(enames(i));

      end loop;

    exit when enames.count cn_batch_size;

    end loop;

    close cur_emp;

    end;

四、綁定變量分級(jí)(bind graduation)

根據(jù)文本型綁定變量的定義長度而將這些綁定變量分成四級(jí)

1、32 字節(jié)(bytes) 以內(nèi)第一級(jí) 分配 32 字節(jié)

2、33–128 字節(jié)第二級(jí)     分配 120 字節(jié)

3、129–2000 字節(jié)第三級(jí) 分配 2000 字節(jié)

4、2000 字節(jié)以上第四級(jí),按實(shí)際綁定變量大小,小于等于 2000 則分配 2000 字節(jié),大于 2000 則分配 4000 字節(jié)

注意 oracle 只對(duì)文本型綁定變量分級(jí),數(shù)值型的統(tǒng)一分配 22 字節(jié),另外一個(gè)重要知識(shí)點(diǎn),在 pl/sql 中,要是文本綁定變量的定義長度發(fā)生了變化,因?yàn)?child cursor 里存儲(chǔ)了該綁定變量的長度和類型,所以這個(gè) sql 就會(huì)新做硬解析。因此,為了避免不必要的硬解析,在 pl/sql 中,定義文本綁定變量是,最好統(tǒng)一定義長度,比如 varchar2(4000);

五、目標(biāo) sql 中的綁定變量不宜過多

六、如何得到已執(zhí)行 sql 中綁定變量的值

V$SQL_BIND_CAPTURE,如果已經(jīng)被 aged out 除 shared pool, 則可以看另外兩張 dba_hist_sqlstat,dba_hist_sqlbind

滿足下列條件之一,含有綁定變量的目標(biāo) sql 中的綁定變量值會(huì)被捕獲,然后可以從 v$sql_bind_capture 中查詢到

1、該 sql 做的是硬解析

2、該 SQL 做的是軟解析或軟軟解析,這是每隔 15 分鐘,捕獲一次值

注意對(duì)綁定變量值的捕獲只在 where 語句中的綁定變量,其他比如 insert 中的值不會(huì)被捕獲

感謝各位的閱讀,以上就是“怎么使用 ORACLE 中的綁定變量”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么使用 ORACLE 中的綁定變量這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-26發(fā)表,共計(jì)2568字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 丰县| 平舆县| 景东| 房山区| 黄骅市| 桐乡市| 平舆县| 周宁县| 方城县| 安岳县| 织金县| 乐山市| 巴南区| 郎溪县| 北票市| 富宁县| 庐江县| 沧州市| 绩溪县| 虞城县| 都江堰市| 常州市| 明水县| 河北省| 上杭县| 三台县| 维西| 英吉沙县| 通化市| 连城县| 涡阳县| 隆化县| 宁阳县| 盐池县| 仲巴县| 清镇市| 太湖县| 普宁市| 无锡市| 增城市| 扶沟县|