--=========绑定变量================= --====绑定变量 --- 在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时,不需要软分析. ---过程中的参数自动转化为绑定变量
Oracle数据库之PLSQL绑定变量
猜你喜欢
转载自whatisjavabean.iteye.com/blog/2005563
今日推荐
周排行