Q:

Having some trouble with case statement

I need to take the first day of each january from 2008 to 2018 then display the day then make a case statement that displays a string of text to go along with it. 
I've tried looking up on Oracle guide and can't find anything for this specific context
Declare
lv_date date;
day_of_week   VARCHAR2(30);
day_of_week_exp   VARCHAR2(30);
begin
lv_date := TO_DATE('1-Jan-2008','dd-mon-yyyy');
for i in 1..11 
loop
day_of_week := TO_CHAR(lv_date,'DAY');
DBMS_OUTPUT.PUT_LINE(day_of_week);

CASE
WHEN day_of_week = 'MONDAY' THEN DBMS_OUTPUT.PUT_LINE('moody' || 
day_of_week);
end case;

lv_date := ADD_MONTHS(lv_date,12);
end loop;

end;

A:

You don't need PL/SQL, but use SQL to get the desired results directly :
select 2007 + level as year,
       trunc(to_date(2007 + level,'YYYY'),'YYYY') as first_day_of_year,
       to_char(trunc(to_date(2007 + level,'YYYY'),'YYYY'),'Day') as first_day_week
  from dual
 connect by level <= 2018 - 2008 + 1;

If you want to filter by Mondays then use PL/SQL by converting the above SQL to a cursor :
SQL> set serveroutput on
SQL> begin
  for c in 
    ( select 2007 + level as year,
             trunc(to_date(2007 + level,'YYYY'),'YYYY') as first_day_of_year,
             to_char(trunc(to_date(2007 + level,'YYYY'),'YYYY'),'Day') as day_of_week_exp
        from dual
     connect by level <= 2018 - 2008 + 1
    )
  loop
   if trim(c.day_of_week_exp) = 'Monday' then
    dbms_output.put_line('moody' ||c.day_of_week_exp);
   end if;
  end loop;
end;
/

Demo

