您的位置:首页 > 数据库 > Oracle

在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);但是这样做了之后发现调用的事后,会报异常【参数的个数或者类型不正确】,最后是将这个类型放入包头中定义,原因未知……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐