11gの機能について学びましPRAGMA INLINE
たが、実際にコードを最適化する方法を区別できません。
私はコードを書きました。
create or replace package test12
is
procedure getdata (p_job IN emp.job%TYPE
,p_total OUT number);
end test12;
/
create or replace package body test12
is
PROCEDURE total(p_empno IN EMP.EMPNO%TYPE
,p_total OUT integer)
IS
BEGIN
select sal into p_total from emp where empno=p_empno;
END total;
procedure getdata (p_job IN emp.job%TYPE
,p_total OUT number)
IS
type cur is ref cursor;
v_cur cur;
v_emp emp.empno%TYPE;
v_total integer:=0;
BEGIN
for i in 1..100000
loop
open v_cur for select empno from emp where job=p_job;
loop
fetch v_cur into v_emp;
exit when v_cur%notfound;
--PRAGMA INLINE(total,'YES');
total(v_emp,v_total);
p_total:=p_total+v_total;
end loop;
close v_cur;
end loop;
END getdata;
end test12;
/
declare
v_total integer;
v_start integer;
v_end integer;
begin
v_start:=DBMS_UTILITY.GET_TIME;
test12.getdata('CLERK',v_total);
v_end :=DBMS_UTILITY.GET_TIME;
v_total:=v_end-v_start;
dbms_output.put_line('time is '||v_total);
end;
/
今、それなしpragma inline
で実行すると、次の時間が与えられます
First Run : time is 3573
Second Run: time is 3571
Third Run : time is 3554
今、私がpragma inline
それで走ると、私は次の時間を与えます
First Run : time is 3471
Second Run: time is 3489
Third Run : time is 3482
しかし、ここでは、2つの間に大きな違いは見られませんでした。その理由は何でしょうか?