declare
i number;
j number;
sqlstr varchar2(200);
begin
i:=1;
j:=2;
sqlstr:='insert into tabletest(f1,f2,f3,f4,f5)
values(:x,:x,:y,:x,:x)';
execute immediate sqlstr using i,i,j,i,i;
end;然后我怎么在别的plsql程序里面使用这些绑定变量(x,x,y,x,x)呢?绑定变量不就是让大部分的plsql程序在共享池里面共享吗?
i number;
j number;
sqlstr varchar2(200);
begin
i:=1;
j:=2;
sqlstr:='insert into tabletest(f1,f2,f3,f4,f5)
values(:x,:x,:y,:x,:x)';
execute immediate sqlstr using i,i,j,i,i;
end;然后我怎么在别的plsql程序里面使用这些绑定变量(x,x,y,x,x)呢?绑定变量不就是让大部分的plsql程序在共享池里面共享吗?
说的是绑定变量我们定义完毕之后,我们在别的程序包体中给这个绑定变量赋值是吧,那我们赋值完毕,是否commit下,就可以执行了呢,还是需要重新写出完整的sql语句呢?
像你里面的示例:
sqlstr:='insert into tabletest(f1,f2,f3,f4,f5)values(:x,:x,:y,:x,:x)';这种sql语句,在每次plsql程序包里面,如果我想要用绑定变量是否每次都需要这么声明定义一次呢?
insert into tabletest(f1,f2,f3,f4,f5)values(:x,:x,:y,:x,:x) using 1,2,3,4,5
那怎么实现 绑定变量不就是让大部分的plsql程序在共享池里面共享 的功能呢?
给你个列子看看,就明白了:
create table t(cola number,colb number,colc number,cold number);
declare
l_number number;
begin
for i in 1 .. 100
loop
l_number := dbms_random.random;
execute immediate
'insert into/*nnnn*/ t values ( ' || l_number || ',' ||
l_number || ',' ||
l_number || ',' ||
l_number || ')';
end loop;
commit;
end;
/2.应用bind变量的例子,效率较高
declare
l_number number;
begin
for i in 1 .. 100 loop
l_number := dbms_random.random;
execute immediate
'insert into/*yyyy*/ t values ( :x1, :x2, :x3, :x4 )'
using l_number, l_number, l_number, l_number;
end loop;
commit;
end;
/SELECT COUNT(*) FROM v$sql s WHERE s.SQL_TEXT LIKE '%nnnn%';
--102
SELECT COUNT(*) FROM v$sql s WHERE s.SQL_TEXT LIKE '%yyyy%';
--4binging变量使用和不使用在v$sql中的数量是差别很大的。
[/Quote]