目录
动态执行sql
变量赋值方式:
拼接sql方式:
动态游标
变量赋值方式:
拼接sql方式:
动态执行sql
分别运行一万次,执行三遍
变量赋值方式执行三遍耗时在80毫秒左右
拼接sql方式执行三遍耗时在200毫秒左右
由此可见,变量赋值方式更快。
变量赋值方式:
declare
a number;
begin
for i in 1..10000
loop
execute immediate 'select :b from dual' into a using i;
end loop;
DBMS_OUTPUT.PUT_LINE(a);
end;

拼接sql方式:
declare
a number;
begin
for i in 1..10000
loop
execute immediate 'select ' || i || ' from dual' into a;
end loop;
DBMS_OUTPUT.PUT_LINE(a);
end;
动态游标
分别运行一万次,执行三遍
变量赋值方式执行三遍耗时在190毫秒左右
拼接sql方式执行三遍耗时在250毫秒左右
由此可见,变量赋值方式更快。
变量赋值方式:
declare
type cur is ref cursor;
cr cur;
a number;
b number;
begin
for i in 1..10000
loop
open cr for 'select :c From Dual' using i;
loop
fetch cr into a;
exit when cr%notfound;
b := a;
end loop;
close cr;
end loop;
DBMS_OUTPUT.PUT_LINE(b);
end;
拼接sql方式:
declare
type cur is ref cursor;
cr cur;
a number;
b number;
begin
for i in 1..10000
loop
open cr for 'select '|| i || ' From Dual';
loop
fetch cr into a;
exit when cr%notfound;
b := a;
end loop;
close cr;
end loop;
DBMS_OUTPUT.PUT_LINE(b);
end;