cjqpc12345

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

CREATE OR REPLACE FUNCTION f_cursor RETURN SYS_REFCURSOR
IS
   lv_ret SYS_REFCURSOR;
   lv_sql VARCHAR2(1000);
BEGIN
   FOR lv_rec IN (SELECT col_a FROM t1) LOOP
           lv_sql :=lv_sql||',MAX(DECODE(col_b,'''||lv_rec.col_a||''',col_c)) AS '||lv_rec.col_a; 
   END LOOP;
   lv_sql := 'SELECT '||LTRIM(lv_sql,',')||' FROM t2';  //①
   
   OPEN lv_ret FOR lv_sql;
   RETURN lv_ret;

END f_cursor;

主题思想是动态生成sql语句,然后执行这条sql语句。其中要注意的地方是,①这条语句这要用下group by分组,进行数据筛选。

这里多提一句,用group by 分组时,select后面的字段要么是group by后出现的字段,要么本身就是聚合函数。

posted on 2010-01-06 21:02  狂飙三  阅读(716)  评论(0)    收藏  举报