存储过程调用数组参数传递
‘壹’ jsp调用存储过程是如何把一个数组作为参数传递
没遇到过传数组的,如果要传数组的话,都是把数组组合成一个字符串再传给存储过程,举个例子,存储过程中有select
name
from
student
where
id
in
(idVarArr)这样的语句,
这个idVarArr就是要传递进去的参数,你传入前就把数组变成类似"'id1','id2','id3',..."的字符串再传存储过程就可以了.这是通用处理方式
‘贰’ WebService调用oracle存储过程,传入数组参数
你要在webservice中编写相应的调用存储过程的接口,具体看你应用的什么语言技术。比如下面java调用存储过程如下:
Session session = HibernateSessionFactory.getSession();
//连接对象
Connection conn = null;
//数据集对象
ResultSet rs = null;
//用来取得表列明的 对象
ResultSetMetaData rsmd = null;
CallableStatement proc = null;
conn = session.connection();
conn.setAutoCommit(false);
try {
if (conn != null) {
proc = conn.prepareCall("{call 存储过程包名过程名(n个传入参数对应n个问号,返回参数或游标?占位) }");
// 如下过程PKG_GETDATA有4个传入参数,所有在程序包是PKG_QUERY
//proc = conn.prepareCall("{call PKG_QUERY.PKG_GETDATA(?,?,?,?,?) }");
proc.setString(1, 参数);
//依次按照传入参数顺序与?问号位置传入所有参数
//最后传入n个参数后一位的返回游标
//proc.registerOutParameter(n+1, oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
rs = (ResultSet) proc.getObject(n+1);
conn.commit();
}
可以将上面代码写成一个公用的调用存储过程的通用接口。
别人调用你的webservice 可以具体的参数个数及顺序传递给你的接口,也可以传递一个object数组
‘叁’ mysql的存储过程怎么传入数组参数
没试过往里面传数组,一般都是多传几个参数,把几个参数放入SqlParameter[]中,然后cmd.Parameters.AddRange(pars);
创建方法:
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@PageIndex","ccc"),
new SqlParameter("@PageSize","ccc"),
new SqlParameter("@StrSql","ccc")
};
ccc就是你想传入的值,带@的就是你在存储过程中定义的参数。
算是一种另类的数组吧。要不你就把所有条件组合成一个字符串,中间用特殊符号隔开,到数据库用split方法再分回来,不过这个方法比较麻烦,不推荐
‘肆’ 在pb里调用存储过程的时候,如何传递数组变量
你调用的存储过程需要的变量放在一个数组中了是吧,你的数组是怎么存储变量的,比如:存储过程需要两个变量@year char(4),@month integer,这两个变量是怎么存储在数组中的呢?比如是这样存储的吧 @year + @month ,这样的格式存储的数组
string ls_string,ls_year
integer li_month,li_persion
array a[]
FOR li_count = 1 to LowerBound(arrary) //数组名
ls_string = a[li_count]
li_persion = pos(ls_string,'+')
ls_year = mid(ls_string,1,li_persion - 1)
li_month =integer(mid(ls_string,li_persion + 1 )
DECLARE pc PROCEDURE FOR proc
@year = :ls_year,
@month = :li_month
USING sqlca;
EXECUTE pc ;
NEXT