Oracle數據庫之PLSQL綁定變量

--=========綁定變量=================
--====綁定變量
--- 在PL/SQL的sql直接使用綁定變量:bv_name

variable k number; --聲明k是綁定變量
--打印k的值
print k; -- 結果 是沒有值

exec :k :=1000; --綁定變量賦值	 
print k; -- 結果 1000

--===匿名塊使用綁定變量===
declare
	i number(4) :=1;
begin
	 dbms_output.put_line('i:' || i);
	:k :=i; -- 綁定變量賦值
	 dbms_output.put_line('k:' || :k);
end;

-- 分析綁定變量的作用
--需求:向test表中的c1列添加數據 1.. 100 loop

-- 靜態SQL
CREATE OR replace procedure p1
	is
begin
	for i in 1 .. 100 loop
		insert into  t1 values (i);
	end loop;
	commit;
end;--編譯過程階段完成 dml語句的編譯

--執行
begin
	p1 -- 1次硬分析 1次軟分析  100次執行
end; 

--動態SQL ,沒使用綁定變量
create or replace procedure p1
	is
begin
	for i in 1 .. 100 loop
	execute immediate 'insert into t1 values ('|| i || ')';
	end loop;
	execute immediate 'commit';
end; --編譯過程,不會編譯insert 

--執行
begin
	p1 -- 100次硬分析 100次軟分析  100次執行
end; 


--動態 sql +綁定變量
variable num number;
create or replace procedure p1 
	is
begin
	for i in 1..100 loop
			-- :a是佔位符  
		execute immediate 'insert into t1 values (:a)' using i;
	end loop;
	execute immediate 'commit';
end;

--執行
begin
	p1 -- 1次硬分析 100次軟分析  100次執行
end; 


--======軟解析硬解析
--- Oracle利用內部的hash算法來取得該sql的hash值,然後在
----libray cache(PGA裏面的一塊區域) 裏查找是否存在該hash值.

----假設存在相同的hash值,則將此sql與cache中的進行比較,
--假設'相同',就將利用已有的解析樹與執行計劃,而省略了優化器相關工作,這就是軟解析的過程.

----如果上面兩個假設條件有一個不成立,那麼優化器都將創建解析樹,
----生成執行計劃的動作,這個過程叫硬解析.



--===========PL/SQL中的靜態SQL====
---Oracle在解析SQL時會把pl/sql中定義的變量轉爲綁定變量
---insert into test values (:a1);減少硬分析次數
---Server process將執行完的SQL cache起來,不關閉.當再次執行sql時,不需要軟分析.
---過程中的參數自動轉化爲綁定變量







 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章