ORACLE中对in操作使用变量绑定的方法
在ORACLE数据库编程中使用变量绑定,可以重用共享池的查询,最小化硬解析的需求,提高数据库性能。
我们知道in操作符接受两种list, 一个是由一个个item组成的list, 另一个是由另一个表中选出的list。第一种方式由于值个数不一定,变量绑定具有一定的困难。于是我们思路就集中到准备将一个字符串传入到sql语句中,然后使用一个方法将字符串parse成一个table, 再传回in operator,来达到变量绑定的目的。
下面以开发中经常遇见的查询网点办理业务资料或者操作员业务资料为例,来说明如何实现这种变量的绑定操作。
1、首先我们来创建方法,及由此方法返回的table类型:
tc@tc> create or replace type numTableType as table of number
/
2、创建函数,传入参数为字符串,返回值为TABLE类型。
tc@tc > create or replace function str2numList( p_string in varchar2 ) return
numTableType
as
v_str long default p_string ;
v_n number;
v_data numTableType := numTableType();
begin
loop
v_n := to_number(instr( v_str, ',' ));
exit when (nvl(v_n,0) = 0);
v_data.extend;
v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));
v_str := substr( v_str, v_n+1 );
end loop;
return v_data;
end;
/
3、程序中编写使用。
Procedure Vwbstat
(
p_Begindate Date,
p_Enddate Date,
p_Kind Varchar2,
p_User_Table Varchar2,--这里传入的字符串为’52802100101,52802100102,’
t_Rs Out Reccur
) As
v_Index Number;
Begin
Open t_Rs For
Select * from
Where Arcopr
In (Select * From The (Select Cast(Str2numlist(p_User_Table) As Numtabletype) From dual) ) Order By Arcopr; /