我现在在前方的检索经过一系列处理以后,有一堆值放在一个Oracle的类似动态数组里面,这个类型的定义如下
CREATE TYPE DEVUSR00.TBL_NKRKKEDD_U AS TABLE OF XXX这个TBL_NKRKKEDD_U类型当前有一个实例,里面具有多条记录,我需要对这个实例按照某种规则进行排序有什么办法呢?如果要建立一个临时表的话,由于这个TYPE中变量很大,也没什么必要的感觉

解决方案 »

  1.   

    SQL> create type my_record AS OBJECT (col1 number
      2                                  ,col2 number
      3                                  ,col3 number
      4                                  );
      5  /Type created.SQL> create type my_table as table of my_record;
      2  /Type created.SQL> DECLARE
      2    v_tab my_table  := my_table();
      3    v_sort my_table := my_table();
      4  BEGIN
      5    FOR i IN 1..1000
      6    LOOP
      7      v_tab.extend;
      8      v_tab(v_tab.last) := my_record( TRUNC(dbms_random.value(1,1000))
      9                                    , TRUNC(dbms_random.value(1,1000))
     10                                    , 1000-i
     11                                    );
     12    END LOOP;
     13    FOR record IN ( SELECT nt.col1 x
     14                         , nt.col2 y
     15                         , nt.col3 z
     16                      FROM TABLE(CAST(v_tab AS my_Table)) nt
     17                     ORDER BY nt.col1 )
     18    LOOP
     19      IF MOD(record.x,25)=0 THEN
     20        Dbms_output.put_line(record.x);
     21      END IF;
     22    END LOOP;
     23  END;
     24  /