FUNCTION FILL_ARRAY (strQuery IN VARCHAR2) RETURN THEIS_TN_T
IS
    temStr             VARCHAR2(1000)  := '';
    strArray           THEIS_TN_T      := THEIS_TN_T();
    RefCur_Array       CursorType;BEGIN
    OPEN RefCur_Array FOR strQuery;
        IF RefCur_Array IS NOT NULL THEN
            LOOP
                FETCH RefCur_Array INTO temStr;
                EXIT WHEN RefCur_Array%NOTFOUND;
                strArray.EXTEND;
                strArray(strArray.COUNT) := temStr;
            END LOOP;
        END IF;
       RETURN strArray;
END FILL_ARRAY;
请问这个是什么意思啊?

解决方案 »

  1.   

    THEIS_TN_T是一个定义的table类型
    strArray.EXTEND;是分配空间+1,就可以往里面放一条数据
      

  2.   

    THEIS_TN_T是哪里定义的啊?  我看存储过程里面没有定义啊!!!!     
      

  3.   


    FUNCTION FILL_ARRAY( --定义函数名称:FILL_ARRAY
      STRQUERY IN VARCHAR2 --函数入参:STRQUERY
    )RETURN THEIS_TN_T --函数返回值:THEIS_TN_T(从函数体可以看出这是个 对象类型)
    IS
      TEMSTR       VARCHAR2(1000) := ''; --定义变量
      STRARRAY     THEIS_TN_T := THEIS_TN_T(); --定义变量并调用 对象的构造方法【THEIS_TN_T()】 初始化
      REFCUR_ARRAY CURSORTYPE; --定义一个游标变量BEGIN
      OPEN REFCUR_ARRAY FOR STRQUERY; --打开游标变量,由此可以看出传入的参数应该是一个sql字符串
      IF REFCUR_ARRAY IS NOT NULL THEN --判断条件
        LOOP --循环
          FETCH REFCUR_ARRAY --从游标里取一条数据 into 到 TEMSTR
            INTO TEMSTR;
          EXIT WHEN REFCUR_ARRAY%NOTFOUND; --如果没有取到数据 跳出循环。
          STRARRAY.EXTEND; --给 STRARRAY 扩展一个存储空间,将取到的数据存入
          STRARRAY(STRARRAY.COUNT) := TEMSTR; --STRARRAY.COUNT 第一次应该是1,下一次增加,总之等于 STRARRAY 中存储的数据个数                              
        END LOOP;
      END IF;
      RETURN STRARRAY; --将这个值返回
    END FILL_ARRAY;
      

  4.   


    --查查就知道了
    select * from all_types where type_name = 'THEIS_TN_T';
      

  5.   

    THEIS_TN_T 应该是类似下面定义的一个集合类型(nested table)
      type THEIS_TN_T is table of varchar2(1000);你这个方法应该是在package里面吧?到package的定义(注意不是package body)里面找。