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后出现的字段,要么本身就是聚合函数。

浙公网安备 33010602011771号