次のようなもの:
VARIABLE cur REFCURSOR; DECLARE dates VARCHAR2(4000); start_date DATE := DATE '2017-09-18'; end_date DATE := DATE '2017-09-19'; BEGIN SELECT LISTAGG( 'DATE ''' || TO_CHAR( dt, 'YYYY-MM-DD' ) || ''' AS "' || TO_CHAR( dt, 'FMDY-DD' ) || '"', ',' ) WITHIN GROUP ( ORDER BY dt ) INTO dates FROM ( SELECT start_date + LEVEL - 1 AS dt FROM DUAL CONNECT BY LEVEL <= end_date - start_date + 1 ); OPEN :cur FOR 'SELECT * FROM ( SELECT t.*, MIN( start_date ) OVER ( PARTITION BY prod_id ) AS min_start_date, SUM( tot_hours ) OVER ( PARTITION BY prod_id ) AS prod_tot_hours FROM prod_timings t WHERE start_date BETWEEN :1 AND :2 ) PIVOT ( SUM( tot_hours ) FOR start_date IN (' || dates || ') ) ORDER BY prod_id' USING start_date, end_date; END; / PRINT cur;
プレ>