從oracle的共享池的設計、和oracle推薦的 pl/sql 寫法中,可以看出,變數繫結對效能有比較大的影響,那麼,如何在pl/sql 中使用變數繫結呢?
首先看看不使用變數繫結的用法:
declare
cursor cur_temp(id number) is
select * from table_a where a=id;
c_temp cur_temp%rowtype;
beign
open cur_temp(1);
loop
fetch cur_temp into c_temp;
exit when cur_temp%notfound;
insert into b values (c_temp.a);
end loop;
close cur_temp;
commit;
end;
上面是沒有使用變數繫結的用法,包括游標和操作語句。
再看下面使用變數繫結的用法:
先要type cursortype is ref cursor;
然後:declare
cur_temp cursortype;
c_temp table_a%rowtype;
begin
open cur_temp for 'select * from table_a where a=:1' using 91;
loop
fetch cur_temp into c_temp;
exit when cur_temp%notfound;
execute immediate 'insert into b values (:1)' using c_temp.a;
end loop;
close cur_temp;
commit;
end;
上面是在pl/sql 塊中的寫法,這個寫法也同樣適用於儲存過程,觸發器,函式,包等可以用pl/sql 的地方。
對於需要用 into 的地方,可以如下使用:
i number(6);
execute immediate 'select count(*) from table_a where a =:1' into i using 89;
執行後,取出的值存放在了變數 i 中。
在pl/sql 中,變數繫結的常見用法基本如上所示,建議全部使用變數繫結。
Oracle PL SQL動態獲取變數
假設有一張員工表fnd employee有如下字段employee id,name,email,phone四個字段,然後我定義四個變數v1,v2,v3,v4 來存這四個字段 例 select from fnd employee into col1,col2,col3,col4 where rownu...
oracle pl sql之游標變數
與游標類似,游標變數也可以處理多行查詢的結果集。但是,游標與游標變數是不同的,就 像常量和變數的關係一樣。游標包括顯式游標和隱式游標,它們都是靜態定義的。當使用者使用它們時,就需要再宣告時定義查詢。而游標變數是動態的,它不與特定 的查詢繫結在一起,而是執行時才確定所使用的查詢。游標變數的定義包括兩個...
oracle plsql中decode 函式用法
在oracle plsql的,decode函式有乙個if then else語句的功能。decode函式的語法是 decode expression search result search result default expression值進行比較。search 是對表達相比的價值。result...