在Oracle中使用字符串数组参数
2008-12-09 10:37
369 查看
今天在项目中需要使用一个字符串数组参数,其实本来打算在cs文件中拼接字符串的,不过leader说可以在Oracle中使用数组参数,所以就看看了……
其具体过程如下:
1、需要的类的命名空间:
A、Oracle.DataAccess.Client
B、Oracle.DataAccess.Types
2、数据库包中定义如下:
TYPE t_cursor is ref cursor; -- 游标
TYPE AssocArrayVarchar2_t is table of VARCHAR2(100) index by BINARY_INTEGER; --数组参数类型
3、存储过程如下:
PROCEDURE GetOrgInforResults(shortname varchar2,strOrg IN AssocArrayVarchar2_t,g_cursor out t_cursor )
as
v_str varchar2(200);
v_str2 varchar2(2000);
begin
v_str:= 'select og_id,og_name from orginfor where isuse=''1''
and og_id in ( ';
FOR i IN 1..strOrg.count LOOP
if(i = strOrg.count)then
v_str2:=v_str2||''''||strOrg(i)||'''';
else
v_str2:=v_str2||''''||strOrg(i)||''',';
end if;
END LOOP;
v_str:=v_str||v_str2||' ) group by og_id,og_name';
open g_cursor for v_str;
end;
4、调用代码如下:
public static DataSet GetOrgInforByName(string orgName, string[] strOrg, string tableName)
{
Oracle.DataAccess.Client.OracleParameter[] param = new Oracle.DataAccess.Client.OracleParameter[3];
param[0] = new Oracle.DataAccess.Client.OracleParameter("shortname", OracleDbType.Varchar2, 14);
param[0].Value = orgName;
param[1] = new Oracle.DataAccess.Client.OracleParameter("strOrg", OracleDbType.Varchar2, strOrg.Length);
param[1].CollectionType = OracleCollectionType.PLSQLAssociativeArray;
param[1].Value = strOrg;
param[1].Direction = ParameterDirection.Input;
param[2] = new Oracle.DataAccess.Client.OracleParameter("tableName", OracleDbType.RefCursor);
param[2].Direction = ParameterDirection.Output;
DataSet ds = OracleHelper_Assess.ExecuteDataSet(OracleProvider.connectionStringWithConfig, CommandType.StoredProcedure,
GetOrgInforResult,tableName,
param);
return ds;
}
这里仿照了微软的OracleHelper制作了一个自定义的类:OracleHelper_Assess,里面的方法是一样的。
过程其实和Oracle提供的案例差不多,只是使用完毕之后才发觉拼接字符串的过程从cs文件中转移到了存储过程中,不晓得这样是不是提高了代码的效率……
另外,就是本来打算在空间里定义一个类型的:create or replace type AssocArrayVarchar2 is table of varchar2(100);但是这样做了之后发现调用的事后,会报异常【参数的个数或者类型不正确】,最后是将这个类型放入包头中定义,原因未知……
其具体过程如下:
1、需要的类的命名空间:
A、Oracle.DataAccess.Client
B、Oracle.DataAccess.Types
2、数据库包中定义如下:
TYPE t_cursor is ref cursor; -- 游标
TYPE AssocArrayVarchar2_t is table of VARCHAR2(100) index by BINARY_INTEGER; --数组参数类型
3、存储过程如下:
PROCEDURE GetOrgInforResults(shortname varchar2,strOrg IN AssocArrayVarchar2_t,g_cursor out t_cursor )
as
v_str varchar2(200);
v_str2 varchar2(2000);
begin
v_str:= 'select og_id,og_name from orginfor where isuse=''1''
and og_id in ( ';
FOR i IN 1..strOrg.count LOOP
if(i = strOrg.count)then
v_str2:=v_str2||''''||strOrg(i)||'''';
else
v_str2:=v_str2||''''||strOrg(i)||''',';
end if;
END LOOP;
v_str:=v_str||v_str2||' ) group by og_id,og_name';
open g_cursor for v_str;
end;
4、调用代码如下:
public static DataSet GetOrgInforByName(string orgName, string[] strOrg, string tableName)
{
Oracle.DataAccess.Client.OracleParameter[] param = new Oracle.DataAccess.Client.OracleParameter[3];
param[0] = new Oracle.DataAccess.Client.OracleParameter("shortname", OracleDbType.Varchar2, 14);
param[0].Value = orgName;
param[1] = new Oracle.DataAccess.Client.OracleParameter("strOrg", OracleDbType.Varchar2, strOrg.Length);
param[1].CollectionType = OracleCollectionType.PLSQLAssociativeArray;
param[1].Value = strOrg;
param[1].Direction = ParameterDirection.Input;
param[2] = new Oracle.DataAccess.Client.OracleParameter("tableName", OracleDbType.RefCursor);
param[2].Direction = ParameterDirection.Output;
DataSet ds = OracleHelper_Assess.ExecuteDataSet(OracleProvider.connectionStringWithConfig, CommandType.StoredProcedure,
GetOrgInforResult,tableName,
param);
return ds;
}
这里仿照了微软的OracleHelper制作了一个自定义的类:OracleHelper_Assess,里面的方法是一样的。
过程其实和Oracle提供的案例差不多,只是使用完毕之后才发觉拼接字符串的过程从cs文件中转移到了存储过程中,不晓得这样是不是提高了代码的效率……
另外,就是本来打算在空间里定义一个类型的:create or replace type AssocArrayVarchar2 is table of varchar2(100);但是这样做了之后发现调用的事后,会报异常【参数的个数或者类型不正确】,最后是将这个类型放入包头中定义,原因未知……
相关文章推荐
- Oracle存储过程传入类似java中list、数组类型的参数并使用
- Oracle数据库案例整理-执行Oracle脚本失败或异常-SQL命令中字符串参数使用双引号导致更新数据库表信息失败
- oracle中,使用存储过程带数组参数的形式向表中添加数据(存储过程,数组参数,序列,触发器,类型,循环)
- oracle 使用存储过程分割字符串为数组
- PHP的CURLOPT_POSTFIELDS参数使用数组和字符串的区别
- 终于找到了可以使用数组作为Oracle程序包参数的方法
- SQLServer-存储过程中使用字符串和分隔符实现传递数组参数
- 把参数字符串中的字符反向排列(不使用数组和库函数操作字符串的函数,不要局部数组来临时存储参数字符串)
- PHP的CURLOPT_POSTFIELDS参数使用数组和字符串的区别
- SQLServer-存储过程中使用字符串和分隔符实现传递数组参数(转)
- SQL Server存储过程中使用"数组参数"
- 在COM中使用数组参数-SafeArray[转载]
- java 调用oracle存储过程传入 数组参数 不用纯jdbc连接
- 对字符串数组进行排序,在冒泡法排序中使用compareTo()方法确定排序的顺序。
- javascript数组元素的添加、删除与插入以及参数数组的使用
- 在flash lite1.1中使用字符串模拟 数组
- 使用JdbcTemplate模板时传递的参数Map和Object []数组
- symbian 字符串数组CDesCArray使用
- oracle profile参数文件管理和使用
- 第十七周-项目二(3)求字符串的长度并返回。(用数组名作参数)