1.前言。
oracle10g後,使用繫結變數更能提高效率。
以下**的文章。
讓oracle自己繫結變數
set serverout on;
set timing on;
declare
l_sql varchar();
l_count number;
l_param varchar();
l_param varchar();
begin
l_param:=a;
l_param:=b;
select count(*) into l_count from table where col_=l_param and col_=l_param;
dbms_outputput_line(l_count);
end;
/在上面的情況oracle會自己繫結變數即如果引數儲存在乙個陣列中select語句放在乙個迴圈中
select 語句只會編譯一次
像這樣for i in
loop
select count(*) into l_count from table where col_=l_param and col_=l_param and col_=i;
dbms_outputput_line(l_count);
end loop
不繫結變數
set serverout on;
set timing on;
declare
l_sql varchar();
l_count number;
l_param varchar();
l_param varchar();
begin
l_param:=a;
l_param:=b;
l_sql:=select count(*) into :x from table where col_=||l_param|| and col_=||l_param;
execute immediate l_sql into l_count;
dbms_outputput_line(l_count);
end;
/動態繫結變數
set serverout on;
set timing on;
declare
l_sql varchar();
l_count number;
l_param varchar();
l_param varchar();
begin
l_param:=a;
l_param:=b;
l_sql:=select count(*) into :x from table where col_=:y and col_=:z ;
execute immediate l_sql into l_count using l_paraml_param;
dbms_outputput_line(l_count);
end;
/:x:y:z相當於佔位符即
用:p:p:p是一樣的
用:x:x:x也是一樣的
需要的繫結變數按順序排在執行語句後面就可以了into的除外
不過還是用pp好些至少可以看出繫結了多少個變數
Oracle 繫結變數用法
在oracle 中,對於乙個sql語句,存在兩種可選的解析過程,一種是硬解析,一種是軟解析.乙個硬解析需要經解析,制定執行路徑,優化訪問計畫等許多的步驟.硬解釋不僅僅耗費大量的cpu,更重要的是會佔據重要的們閂資源,嚴重影響了系統的併發效率。當乙個sql語句提交後,oracle會首先檢查一下共享緩衝...
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...