oracle中使用繫結變數的好處的例子

cnhtm發表於2010-01-15

在oracle中,sql語句使用繫結變數能大幅度提高sharpool的利用率,提高sql語句執行的效率,下面用一個很簡單的例子演示使用繫結變數和不使用繫結變數的差別。

總體步驟如下:

1、建立一個很簡單的表,只有兩個欄位,欄位型別都為varchar2(5)
2、用一個不使用繫結變數的plsql向表中插入10000條記錄,記錄執行時間
3、用一個使用繫結變數的plsql向表中插入10000條記錄,記錄執行時間
4、對比兩中方法所用時間多少

具體步驟:

[@more@]

1、建立表

scott@CNHTM> create table test(col1 varchar2(5),col2 varchar2(5));

Table created.

2、不使用繫結變數插入10000條記錄

首先設定timing on,以便檢視plsql執行了多長時間
scott@CNHTM> set timing on

插入1000條記錄

scott@CNHTM> declare
2 s varchar2(300);
3 begin
4 for i in 1..10000 loop
5 s:='insert into test (col1,col2) values('||i||','||(i+1)||')';
6 execute immediate s;
7 end loop;
8 end;
9 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:16.63

執行時間為16.63秒

scott@CNHTM> rollback;

Rollback complete.

Elapsed: 00:00:00.23

3、使用繫結變數插入10000條記錄

scott@CNHTM> declare
2 s varchar2(300);
3 begin
4 for i in 1..10000 loop
5 s:='insert into test (col1,col2) values(:1,:2)';
6 execute immediate s using i,i+1;
7 end loop;
8 end;
9 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.95

執行時間為0.95秒

scott@CNHTM> rollback;

Rollback complete.

Elapsed: 00:00:00.19

4、時間對比

不使用繫結變數的時候,需要16.63秒,使用繫結變數的時候為0.95秒,差異還是很大的。所以在寫程式或plsql的時候,儘量使用繫結變數,可以大大提高資料庫的效能。

--end--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22049049/viewspace-1030581/,如需轉載,請註明出處,否則將追究法律責任。

相關文章