日期:2014-05-17  浏览次数:20879 次

软解析和硬解析的问题
今天在看一本oracle的书,说到软解析会比硬解析效率更高,并且差别比较大,但是我分别用两段sql测试了下,并没有什么区别,反而结果显示硬解析的效率稍微高一点点。。。,下面是我用的例子;
--硬解析
declare 
begin
for kk in 1 .. 10000 loop
insert into zhb_test_1 (str1) values (kk);
end loop;
end;

--软解析
declare 
v_str varchar2(10);
begin
for kk in 1 .. 10000 loop
execute immediate 'insert into zhb_test_1 (str1) values (:v_str)'using kk;

/*execute immediate 'insert into zhb_test_1 (str1) values ('|| kk||')';
*/end loop;
end;

我试着把10000这个数字改成50000和100000,但是结果并不是我想像的那样随着数量的增多而体现软解析的优势,那么到底是什么原因呢 ?

------解决方案--------------------
楼主的比较方式有误,动态SQL的效率无法同直接SQL相比,
应该写成这样,比较试试看
SQL code
--硬解析
DECLARE
BEGIN
  FOR kk IN 1 .. 10000 LOOP
    EXECUTE IMMEDIATE 'INSERT INTO zhb_test_1 (str1) VALUES (''' || kk || ''')';
  END LOOP;
END;

--软解析
DECLARE
  v_str VARCHAR2(10);
BEGIN
  FOR kk IN 1 .. 10000 LOOP
    EXECUTE IMMEDIATE 'insert into zhb_test_1 (str1) values (:v_str)'
      USING kk;
  END LOOP;
END;