存儲過程調用數組參數傳遞
『壹』 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