If what you are saying is that you want 4 rows per pupil then something like the following should do it.
SELECT
B.course
A.school_cycle_day,
B.legal_first_name,
B.legal_surname,
B.room_no
FROM
(
SELECT '1' AS school_cycle_day
FROM DUAL
UNION ALL
SELECT '2'
FROM DUAL
UNION ALL
SELECT '3'
FROM DUAL
UNION ALL
SELECT '4'
FROM DUAL
) A
LEFT JOIN
(
select
spct.course_code||'-'||spct.course_section as course,
t.school_cycle_day as jour,
p.legal_first_name,
p.legal_surname,
sc.room_no
from
student_program_class_tracks@trl spct,
class_meetings@trl cm,
school_classes@trl sc,
persons@trl p,
timeslots@trl t,
school_timeline_periods@trl tsp
where
spct.school_code=cm.school_code and
spct.school_code=sc.school_code and
spct.school_code=t.school_code and
spct.school_code=tsp.school_code and
spct.school_year=cm.school_year and
spct.school_year=sc.school_year and
spct.school_year=t.school_year and
spct.school_year=tsp.school_year and
t.school_year_track=tsp.school_year_track and
t.school_timeline_code=tsp.school_timeline_code and
t.school_period=tsp.school_period and
spct.class_code=cm.class_code and
spct.class_code=sc.class_code and
sc.reporting_teacher=p.person_id and
cm.block=t.block and
spct.school_code='73' and
spct.school_year='20122013' and
spct.person_id='000170629' and
cm.semester='2' and
cm.term='1' and
t.school_period='1' and
((spct.start_date <= sysdate and spct.end_date >= sysdate) or spct.demit_indicator='0')
) B ON A.school_cycle_day = B.school_cycle_day