今天在看一本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,但是结果并不是我想像的那样随着数量的增多而体现软解析的优势,那么到底是什么原因呢 ?
--硬解析
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,但是结果并不是我想像的那样随着数量的增多而体现软解析的优势,那么到底是什么原因呢 ?
看下他们的Hash值 是否相同.Oracle SQL的硬解析和软解析
http://blog.csdn.net/tianlesoftware/archive/2010/04/07/5458896.aspx------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977
应该写成这样,比较试试看
--硬解析
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;
begin
for kk in 1 .. 10000 loop
insert into zhb_test_1 (str1) values (kk);
end loop;
end;
好像oracle会自动解析为 insert into zhb_test_1 (str1) values (:kk);