基于cast的2个函数

oracle ldboyghg 23℃ 0评论
select * from b_cj ;
select * from b_pmme ;
/*根据成绩表的成绩降序排列,
按排名名额表的名额确定排名和奖金。
排名时不考虑相同成绩。*/
SELECT c.xh,c.cj,b.mc,b.jj
  FROM (SELECT c.*,ROW_NUMBER() OVER(ORDER BY cj DESC) rn FROM b_cj c) c
      ,(SELECT b.mc,b.jj,ROW_NUMBER() OVER(ORDER BY b.mc) rn
         FROM b_pmme b
            , TABLE( CAST( MULTISET( SELECT NULL
                                      FROM DUAL
                                   CONNECT BY LEVEL <= b.rs
                                   )
                            AS SYS.ODCIVARCHAR2LIST )
                           )
       ) b
WHERE c.rn=b.rn;
—b表中每个奖项对应多少个RS
 select * from TABLE(CAST(MULTISET
                   (SELECT NULL FROM DUAL CONNECT BY LEVEL <= 3) AS
                   SYS.ODCIVARCHAR2LIST))
 SELECT b.mc, b.jj, ROW_NUMBER() OVER(ORDER BY b.mc) rn
   FROM b_pmme b,
        TABLE(CAST(MULTISET
                   (SELECT NULL FROM DUAL CONNECT BY LEVEL <= b.rs) AS
                   SYS.ODCIVARCHAR2LIST)) c ;
–2
 CREATE TYPE type_obj AS OBJECT (
   col1  INTEGER,
   col2  VARCHAR2(60)
);
CREATE OR REPLACE
TYPE type_tab IS TABLE OF type_obj ;
DECLARE
  — 宣告與初始化
  obj_type_tab    type_tab := type_tab();
BEGIN
  — 多筆給值
    obj_type_tab := type_tab (
     type_obj ( 37, ‘col2_val1′),
     type_obj (3, ‘col2_val2′),
     type_obj (254, ‘col2_val3′));
  — 逐筆給值
    obj_type_tab.EXTEND;
    obj_type_tab(obj_type_tab.FIRST) := type_obj( 123, ‘col_1_val’);
   obj_type_tab(obj_type_tab.LAST) := type_obj( 12, ‘col_2_val’);
   FOR rec IN (SELECT col1, col2 FROM TABLE(CAST(obj_type_tab AS TYPE_TAB)))
     —   数据转换
  LOOP
    DBMS_OUTPUT.put_line(‘   rec.col1 = ‘ || rec.col1 ||
                         ‘; rec.col2 = ‘ || rec.col2);
  END LOOP;
END;

 

转载请注明:生命不息,奋斗不止 » 基于cast的2个函数

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址