数据访问层的的函数声明如下:
void LoadProjectListByListID(IList<decimal> IDList,out DataSet projectListDS);要写一个存储过程,通过IDList中的数据查询得到结果projectListDS。
其中IDList中有几万个数值,为了提高速度,可以先把IDList转换成一个很长的字符串作为存储过程的输入参数,然后再在数据库中还原成数值,但是数据库中没有这么大的字符串,该怎么办?
是否有更好的解决办法?请高手指教!!

解决方案 »

  1.   

    CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000)CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
        RETURN ty_str_split
    IS
        j INT := 0;
        i INT := 1;
        len INT := 0;
        len1 INT := 0;
        str VARCHAR2 (4000);
        str_split ty_str_split := ty_str_split ();
    BEGIN
        len := LENGTH (p_str);
        len1 := LENGTH (p_delimiter);    WHILE j < len
        LOOP
            j := INSTR (p_str, p_delimiter, i);        IF j = 0
            THEN
                j := len;
                str := SUBSTR (p_str, i);
                str_split.EXTEND;
                str_split (str_split.COUNT) := str;            IF i >= len
                THEN
                    EXIT;
                END IF;
            ELSE
                str := SUBSTR (p_str, i, j - i);
                i := j + len1;
                str_split.EXTEND;
                str_split (str_split.COUNT) := str;
            END IF;
        END LOOP;    RETURN str_split;
    END fn_split;